MySQL日期差异查询

11

我需要从表中获取结果,其中日期应与当前日期相差5天。

例如,我的表中有一个名为specific_date的列,日期的格式为YYYY-MM-DD

我需要类似以下的查询:

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5
2个回答

17

看起来你正在尝试做这个:

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) - Alcaeus D
@AlcaeusD,是的。不过更简单的方法就是使用 NOW() -/+ INTERVAL 1 YEAR/MONTH/DAY/HOUR/MINUTE/SECOND - FanoFN

4

看一下BETWEEN运算符。

expr BETWEEN min AND max

另一种方法是使用 DATE_SUB 操作符。

WHERE date_column > DATE_SUB(NOW(), INTERVAL 5 DAY)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接