查找最近24小时内具有日期字段的记录。

101

在我的SQL查询中,如何使其查找最近24小时内的记录?例如:

   SELECT * FROM news WHERE date < 24 hours

我通常会通过将一个变量设置为date() - 1天,并将其与之比较来完成,但我想知道SQL查询的方式是否更快?

7个回答

164

你只需选择比当前时间减去一天更晚的日期。

SELECT * FROM news WHERE date >= now() - INTERVAL 1 DAY;

83
SELECT * FROM news WHERE date > DATE_SUB(NOW(), INTERVAL 24 HOUR)

能否这样做:WHERE SomeDate > Now() -1? - Hugh Jones
2
@Andrew:我认为应该是“24小时”,而不是“24小时”。 - ypercubeᵀᴹ
1
对我来说运行良好。 - Muhammad Azeem

22

获取最近 24 小时的记录:

SELECT * from [table_name] WHERE date > (NOW() - INTERVAL 24 HOUR)

14
SELECT * from new WHERE date < DATE_ADD(now(),interval -1 day);

5
SELECT * FROM news WHERE date > DATEADD(d,-1,GETDATE())

2
没关系,我看到你已经添加了你正在使用MySQL而不是SQL Server。不过,这个答案可能会帮助其他人 :) - Simon
从当前日期减去1天的结果与选择24小时时间间隔并不相同,而这才是相关问题。从GETDATE()减去1天后的时间范围最多为47.99小时。 - termigrator

3

有很多方法可以做到这一点。列出的方法效果很好,但如果您有一个日期时间字段,则还有另一种方法:

SELECT [fields] 
FROM [table] 
WHERE timediff(now(), my_datetime_field) < '24:00:00'
< p > timediff() 函数返回一个时间对象,因此不要将其与86400(一天中的秒数)进行比较,否则输出结果会出现各种错误。


1
你可以使用 <maketime(24,00,00)>。我注意到原始查询的行为不一致。 - user1086498

-2
SELECT * FROM news WHERE date < DATEADD(Day, -1, date)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接