2011-10-10 90 views
7

我需要從表中得到結果,日期應該與當前日期相差5。Mysql Datediff查詢

即,specific_date列出現在我的表中。日期格式爲YYYY-MM-DD

我需要查詢類似,

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5 

回答

6

它看起來像你試圖做到這一點:

所有的
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 

等等。

+0

是的謝謝,它的工作。 – sathish

+0

這也適用於幾個小時?例如: 'WHERE specific_date <= DATE_ADD(NOW(),INTERVAL 24 HOUR)' –

+0

是的,請參閱我的編輯。 –

3

看一看的BETWEEN操作。

expr BETWEEN min AND max 

另一種方法是使用DATE_SUB操作

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