【发布时间】:2016-09-17 10:30:12
【问题描述】:
我很难理解 MySQL 的日期函数。
例如,我想获取本月和上月的所有记录。
据我了解,我应该使用 MONTH(NOW()) 返回当前月份的整数和上个月的 MONTH(NOW())-1。除非要求在一月份的日期,否则这显然不会起作用,因为它是在函数的结果上执行的,而不是环绕并转到前一年的 12 月。
我将如何编写一个在 1 月份也可以使用的通用函数?由于月份的长度不同,因此无法从 NOW() 中减去以毫秒为单位的月份。
例如,这个查询除了 1 月外都能正常工作:
SELECT
SUM(CASE WHEN MONTH(table_date) = MONTH(NOW())-1 THEN 1 ELSE 0 END) AS LAST_MONTH,
SUM(CASE WHEN MONTH(table_date) = MONTH(NOW()) THEN 1 ELSE 0 END) AS THIS_MONTH
FROM table
WHERE table_date BETWEEN Date_add(NOW(), interval - 1 month) AND NOW()
DAY() 函数也会出现类似的问题,因为月份的长度不同,而且每天编写语句似乎效率不高。
有什么更有效的方法可以为感兴趣的月份的每一天选择记录,而不管该特定日期是否实际有记录?
【问题讨论】: