MySql If else条件

MySql If else条件,mysql,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)

对于给定的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
选择

如果(regression.execution_date>=CONCAT(YEAR(CURDATE()-1)、'-'、'07'、'-'、'01')和regression.execution_date=CONCAT(YEAR(CURDATE()-1)、'-'、'10'、'-'、'01')和regression.execution_date=CONCAT(YEAR(YEAR(CURDATE())、'04'、'01')和'01'))以及regression.execution_date=CONCAT(YEAR(CURDATE()-1)、'-'、'07'、'-'、'01')和regression.execution_date=CONCAT(YEAR(CURDATE()-1)、'-'、'10'、'-'、'01')和regression.execution_date=CONCAT(YEAR(CURDATE())、'-'、'04'、'01')、回归和regression.execution_date是否要计算实际季度

使用以下命令:

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)]>

你想计算实际的四分之一吗

使用以下命令:

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)]>

只需将日期更改7个月,即可获得您想要的定制季度:

SELECT(QUARTER(DATE_SUB(execution_date, INTERVAL 7 MONTH)))
FROM regression
如果您想使用最初的方法,请继续阅读。我在您的查询中发现了几个问题/效率低下,我试图更正这些问题。首先,由于您的查询位于
回归
表上,因此在选择列时不需要显式引用此表,因此我取消了此选项。其次,您正在尝试比较
execution\u date
这大概是一个针对字符串的日期类型,它是
CONCAT()
输出的类型
将手工构建的日期字符串转换为实际的日期类型。最后,我用一个
CASE
表达式替换了一组可怕的嵌套
IF
语句

CASE WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE() - 1), '-', '07', '-', '01'), '%Y-%m-%d') AND
          execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '09', '-', '30'), '%Y-%m-%d')
     THEN CONCAT(YEAR(CURDATE() - 1), '.', '1')
     WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE() - 1), '-', '10', '-', '01'), '%Y-%m-%d') AND
          execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '12', '-', '31'),'%Y-%m-%d')
     THEN CONCAT(YEAR(CURDATE() - 1), '.', '2')
     WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '01', '-', '01'), '%Y-%m-%d') AND
          execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '03', '-', '31'), '%Y-%m-%d')
     THEN CONCAT(YEAR(CURDATE()), '.', '3')
     WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '04', '-', '01'), '%Y-%m-%d') AND
          execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '06', '-', '31'), '%Y-%m-%d')
     THEN CONCAT(YEAR(CURDATE()), '.', '4')
     ELSE '0' END AS theQuarter
FROM regression
执行日期>=STR-TO-date(CONCAT(年份(CURDATE()-1)、'-'、'07'、'-'、'01')、'%Y-%m-%d')和
执行日期=截止日期(年份(CURDATE()-1)、'-'、'10'、'-'、'01')、'%Y-%m-%d')和
执行日期=截止日期(CONCAT(YEAR(CURDATE())、'-'、'01'、'-'、'01')、'%Y-%m-%d')和
执行日期=截止日期(CONCAT(YEAR(CURDATE())、'-'、'04'、'-'、'01')、'%Y-%m-%d')和

执行日期只需将日期移动7个月即可获得您想要的定制季度:

SELECT(QUARTER(DATE_SUB(execution_date, INTERVAL 7 MONTH)))
FROM regression
如果您想使用最初的方法,请继续阅读。我在您的查询中发现了几个问题/效率低下,我试图更正这些问题。首先,由于您的查询位于
回归
表上,因此在选择列时不需要显式引用此表,因此我取消了此选项。其次,您正在尝试比较
execution\u date
这大概是一个针对字符串的日期类型,它是
CONCAT()
输出的类型
将手工构建的日期字符串转换为实际的日期类型。最后,我用一个
CASE
表达式替换了一组可怕的嵌套
IF
语句

CASE WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE() - 1), '-', '07', '-', '01'), '%Y-%m-%d') AND
          execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '09', '-', '30'), '%Y-%m-%d')
     THEN CONCAT(YEAR(CURDATE() - 1), '.', '1')
     WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE() - 1), '-', '10', '-', '01'), '%Y-%m-%d') AND
          execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '12', '-', '31'),'%Y-%m-%d')
     THEN CONCAT(YEAR(CURDATE() - 1), '.', '2')
     WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '01', '-', '01'), '%Y-%m-%d') AND
          execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '03', '-', '31'), '%Y-%m-%d')
     THEN CONCAT(YEAR(CURDATE()), '.', '3')
     WHEN execution_date >= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '04', '-', '01'), '%Y-%m-%d') AND
          execution_date <= STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', '06', '-', '31'), '%Y-%m-%d')
     THEN CONCAT(YEAR(CURDATE()), '.', '4')
     ELSE '0' END AS theQuarter
FROM regression
执行日期>=STR-TO-date(CONCAT(年份(CURDATE()-1)、'-'、'07'、'-'、'01')、'%Y-%m-%d')和
执行日期=截止日期(年份(CURDATE()-1)、'-'、'10'、'-'、'01')、'%Y-%m-%d')和
执行日期=截止日期(CONCAT(YEAR(CURDATE())、'-'、'01'、'-'、'01')、'%Y-%m-%d')和
执行日期=截止日期(CONCAT(YEAR(CURDATE())、'-'、'04'、'-'、'01')、'%Y-%m-%d')和

执行日期您可以使用嵌套IF或CASE语法。您可以使用嵌套IF或CASE语法。谢谢Bernd。我需要基于日期范围的自定义会计季度值。例如,2016年1月1日至2016年3月31日被称为Q3Wait…也许您可以从每个日期中减去某个固定金额来移动季度?或者是这样吗确定?-选择英语教学(季度('2015-10_07'),3,4,1,1)作为季度;选择英语教学(季度('2015-10_07'),3,4,1,1))的年度('now()),','作为四分之一,从2015年7月1日到2015年9月31日,从2015年10月1日第一季度到2015年12月30日,从2016年1月1日第二季度到2016年3月31日,从2016年4月1日第三季度到2016年6月30日第四季度。我需要基于日期范围的自定义会计季度值。例如,2016年1月1日到2016年3月31日被称为Q3Wait…也许您可以减去cer从每个日期开始确定固定金额以转移季度?或者这样可以吗?-选择ELT(季度('2015-10_07'),3,4,1,1)作为季度;选择CONCAT(年度(),','和',ELT(季度('2015-10_07'),3,4,1,1))截至本季度,2015年7月1日至2015年9月31日,2015年10月1日至2015年12月30日,2016年1月1日至2016年3月31日,2016年4月1日至2016年6月30日,第四季度