我在expiry_date
栏中有此记录:
2015-04-30 04:15:29
2015-04-22 06:02:07
我需要选择记录距离到期26
天的位置。现在我正在使用这个不起作用。没有选择任何记录。
SELECT * FROM `client` WHERE `expiry_date` = DATE_ADD(NOW(), INTERVAL 26 DAY)
我搜索了这个网站,许多答案都是使用<=
运营商。该解决方案部分有效。当我在both
列中只需要2015-04-30 04:15:29
时,它会选择我的记录expiry_date
。
如何准确选择即将过期的日期而不是所有日期?提前谢谢。
答案 0 :(得分:2)
对此的简单解决方案是使用date
函数:
WHERE DATE(expiry_date) = DATE_ADD(CURRENT_DATE, INTERVAL 26 DAY)
但是,这会阻止在expiry_date
上使用索引。可以使用索引的替代方法是:
WHERE expiry_date >= DATE_ADD(CURRENT_DATE, INTERVAL 26 DAY) AND
expiry_date < DATE_ADD(CURRENT_DATE, INTERVAL 26 + 1 DAY)
答案 1 :(得分:1)
你遇到这个问题的原因是expiry_date是一种日期时间,所以时间使它不相等。只需将您的代码更改为:
SELECT * FROM client WHERE DATE(expiry_date) = DATE(DATE_ADD(NOW(), INTERVAL 26 DAY))