【发布时间】:2021-02-16 03:25:27
【问题描述】:
在 SQL 查询方面仍然是初学者。 我需要从带有日期字段的表中选择字段,例如从 10 月 1 日到今天。
类似
SELECT field FROM table WHERE table.date BETWEEN ***last october*** and CURDATE()
那么,我可以放入什么来代替 去年 10 月,让它在一年内不再碰它就可以工作?
【问题讨论】:
在 SQL 查询方面仍然是初学者。 我需要从带有日期字段的表中选择字段,例如从 10 月 1 日到今天。
类似
SELECT field FROM table WHERE table.date BETWEEN ***last october*** and CURDATE()
那么,我可以放入什么来代替 去年 10 月,让它在一年内不再碰它就可以工作?
【问题讨论】:
我会检查当前月份是否是 10 月 -> 12 月。在这种情况下,我可以得到当年的 10 月,否则,我会得到去年的 10 月:
-- returns <current year>-10-01 if we are in octobre, november or december, else <current year - 1>-10-01
SELECT CONCAT(IF(MONTH(CURDATE()) >= 10, YEAR(CURDATE()), YEAR(CURDATE()) - 1),'-10-01');
SELECT field
FROM table
WHERE table.date BETWEEN
CONCAT(IF(MONTH(CURDATE()) >= 10, YEAR(CURDATE()), YEAR(CURDATE()) - 1),'-10-01')
and
CURDATE()
【讨论】:
您需要运行几个子查询:
a) 本月:
mysql> select month(now());
+--------------+
| month(now()) |
+--------------+
| 11 |
+--------------+
b) 获取比较年份,例如如果今年 10 月 1 日过去,则返回当前年份,否则返回上一年:
mysql> select case when month(now()) >= 10 then year(now()) else year(now()) - 1 end;
+------------------------------------------------------------------------+
| case when month(now()) >= 10 then year(now()) else year(now()) - 1 end |
+------------------------------------------------------------------------+
| 2020 |
+------------------------------------------------------------------------+
c) 去年 10 月 1 日的构建日期:
mysql> select concat(case when month(now()) >= 10 then year(now()) else year(now()) - 1 end, '-10-01');
+------------------------------------------------------------------------------------------+
| concat(case when month(now()) >= 10 then year(now()) else year(now()) - 1 end, '-10-01') |
+------------------------------------------------------------------------------------------+
| 2020-10-01 |
+------------------------------------------------------------------------------------------+
最后一个查询替换last october
因此最终的查询是:
SELECT field FROM table WHERE table.date BETWEEN CONCAT(CASE WHEN MONTH(NOW()) >= 10 THEN YEAR(NOW()) ELSE YEAR(NOW()) - 1 END, '-10-01') AND DATE(NOW())
【讨论】: