MySql If else 条件

标签 mysql

是否有可能为给定的 mysql 查询引入 if else?此查询生成 4 列。这可以放在一个列中吗?

SELECT 
    IF(regression.execution_date >= CONCAT(YEAR(CURDATE() - 1), '-','07', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '09', '-', '30'), CONCAT(YEAR(CURDATE() - 1), '.', '1'), 0) AS 'Q1',
    IF(regression.execution_date >= CONCAT(YEAR(CURDATE() - 1),'-','10','-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '12', '-', '31'), CONCAT(YEAR(CURDATE() - 1), '.', '2'),0) AS 'Q2',
    IF(regression.execution_date >= CONCAT(YEAR(CURDATE()), '-', '01', '-', '01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '03', '-', '31'), CONCAT(YEAR(CURDATE()), '.', '3'), 0) AS 'Q3',
    IF(regression.execution_date >= CONCAT(YEAR(CURDATE()), '-', '04', '-', '01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '06', '-', '31'), CONCAT(YEAR(CURDATE()), '.', '4'), 0) AS 'Q4'
FROM
    regression

解决方法:

感谢大家的评论。我用 case 实现了它,它起作用了。

SELECT 
CASE 
WHEN regression.execution_date >= CONCAT(YEAR(CURDATE() - 1), '-','07', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '09', '-', '30') THEN (CONCAT(YEAR(CURDATE() - 1), '.', '1')) 
WHEN regression.execution_date >= CONCAT(YEAR(CURDATE() - 1), '-','10', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '12', '-', '31') THEN (CONCAT(YEAR(CURDATE() - 1), '.', '2')) 
WHEN regression.execution_date >= CONCAT(YEAR(CURDATE()), '-','01', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '03', '-', '31') THEN (CONCAT(YEAR(CURDATE()), '.', '3')) 
WHEN regression.execution_date >= CONCAT(YEAR(CURDATE()), '-','04', '-','01') AND regression.execution_date <= CONCAT(YEAR(CURDATE()), '-', '06', '-', '31') THEN (CONCAT(YEAR(CURDATE()), '.', '4')) 
END as 'Quarter'
FROM 
regression

最佳答案

要计算实际的四分之一吗?

使用这个:

SELECT QUARTER(now());

样本

MariaDB [(none)]> SELECT  QUARTER(now());
+----------------+
| QUARTER(now()) |
+----------------+
|              2 |
+----------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SELECT  QUARTER('2015-10_07');
+-----------------------+
| QUARTER('2015-10_07') |
+-----------------------+
|                     4 |
+-----------------------+
1 row in set (0.00 sec)

MariaDB [(none)]>

关于MySql If else 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37292428/

相关文章:

MYSQL选择分组依据并限制每个组,其中created_at在本周内

mysql - 在不停机的情况下迁移巨大的生产数据库

php - 使用 JOIN NULL 值匹配数据库中的列名

php - 如果在使用连接时未找到行,则 SQL 求和为 0

MySQL 选择具有给定 id 最大值的行

mysql - 使用 in where 子句选择多个字段

mysql - 我正在尝试获取数据库中特定文件夹中的项目总数 - SQL (HP ALM)

java - 从文件中插入 200 万条记录到表中

php - MySQL - 按日期选择行并传递给 php 数组

mysql - Yii2/PHP : Abstracting Database Access for InfluxDB and MySQL