【发布时间】:2011-12-04 11:44:21
【问题描述】:
我需要从表格中获取结果,日期应该与当前日期相差 5。
即,specific_date 列存在于我的表中。日期格式为YYYY-MM-DD。
我需要类似的查询,
SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5
【问题讨论】:
标签: mysql sql date time datediff
我需要从表格中获取结果,日期应该与当前日期相差 5。
即,specific_date 列存在于我的表中。日期格式为YYYY-MM-DD。
我需要类似的查询,
SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5
【问题讨论】:
标签: mysql sql date time datediff
您似乎正在尝试这样做:
WHERE specific_date < (NOW() + 5 days)
首先,仔细考虑边界情况。这些边界情况可能会在 SQL 中咬住你的脚踝。你真的想要
WHERE specific_date <= (NOW() + 5 days)
您的specific_date 列时间戳是否仅包含天数(即时间等于午夜的日期)还是包含日期和时间?如果你想得到你想要的结果,你需要注意这些细节。
无论如何,试试这个:
WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)
这是进行此类查找的好方法。列值独立于不等式谓词(<=)的一侧,因此如果列上有索引,mySQL 可以进行索引范围扫描。
MySQL 中的日期运算非常灵活。你可以这样做
NOW() + INTERVAL 10 SECOND
NOW() - INTERVAL 2 MINUTE
NOW() + INTERVAL 4 HOUR
CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */
LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH /*first day of present month*/
NOW() - INTERVAL 1 QUARTER
CURDATE() - INTERVAL 5 YEAR
等等。
【讨论】:
WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 24 HOUR)
NOW() -/+ INTERVAL 1 YEAR/MONTH/DAY/HOUR/MINUTE/SECOND