2015-04-05 65 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

相關問題