检索不到一天的行

时间:2011-11-16 15:54:33

标签: mysql timestamp conditional

我有一个列date,其默认值为CURRENT_TIMESTAMP,例如:2011-11-16 15:34:02。有没有办法在mysql语句中放入一个条件(不是在php中)来检索不到一天的行?类似的东西:

SELECT * FROM orders where date > 24 hours ago

5 个答案:

答案 0 :(得分:22)

您可以使用timestampadd()获取24小时前的时间戳

SELECT * FROM orders WHERE `date` > timestampadd(hour, -24, now());

这相当于

SELECT * FROM orders WHERE `date` > timestampadd(day, -1, now());

答案 1 :(得分:8)

SELECT *
FROM orders
WHERE DATE(`date`) = DATE(NOW() - INTERVAL 1 DAY)

请注意date周围的反引号,因为它是一个保留字。

答案 2 :(得分:0)

是的,将* date_sub *与间隔1天 curdate()结合起来 请参阅此处的文档http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-sub

答案 3 :(得分:0)

你也可以直接使用timestampdiff函数的差异,类似于timestampadd

SELECT * FROM orders WHERE TIMESTAMPDIFF(HOUR, date, NOW()) > 24;

我认为这不能像使用timestampadd一样进行优化(因为它会计算每一行的差异),但在我看来,它更具可读性,如果你没有&# 39;关心优化。

答案 4 :(得分:0)

此语句返回所有今天的行:

select * from orders where date_field >= CURDATE();

CURDATE()返回今天的日期,因此从午夜开始搜索记录。