2015-04-05 43 views
0

我在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) 

我搜索了这个网站,许多答案都是使用<=算子。此解决方案部分工作。当我只需要2015-04-30 04:15:29expiry_date列时,选择我的记录的both

我该如何精确选择即将过期的日期,而不是全部日期?提前致谢。

回答

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) 
+0

嗨,第一个做的工作非常感谢你,但第二个没有。我更喜欢使用索引,但我只能得到空的结果。顺便说一句,“INTERVAL 26 1 DAY”的拼写错误? – sg552 2015-04-05 14:31:17

+1

@ sg552。 。 。应该有(现在是)表达式中的“+”。 – 2015-04-05 20:55:27

1

您遇到此问题的原因是expiry_date是一种日期时间,因此时间使它不相等。只要改变你的代码:

SELECT * FROM client WHERE DATE(expiry_date) = DATE(DATE_ADD(NOW(), INTERVAL 26 DAY)) 
+0

谢谢工程:) – sg552 2015-04-05 14:29:48

相关问题