我需要从表中获取结果,其中日期应与当前日期相差5天。
例如,我的表中有一个名为specific_date
的列,日期的格式为YYYY-MM-DD
。
我需要类似以下的查询:
SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5
看起来你正在尝试做这个:
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 DNOW() -/+ INTERVAL 1 YEAR/MONTH/DAY/HOUR/MINUTE/SECOND
。 - FanoFN