2011-10-10 94 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)