从NOW()-1天选择记录


138

MySQL语句中是否可以通过> = NOW()-1排序记录(通过日期戳),以便选择从今天到今天的所有记录?

Answers:


269

日期/时间函数文档来看,您应该能够执行以下操作:

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY

如何现在去等等。.db中所有可用记录的平均日期。?这仅是一天,但我现在需要所有记录。@jon
Muddasir Abbas

记录使用UTC时是否考虑用户的本地时间?
Adry

1
@Adry:我对此表示怀疑,但是您应该仔细测试。
乔恩·斯基特

62

请注意,结果可能与您预期的略有不同。

NOW() 返回一个 DATETIME

而且INTERVAL可以作为命名的,如INTERVAL 1 DAY = 24 hours

因此,如果您的脚本要在处运行03:00,它将错过first three hours of records from the 'oldest' day

为了获得一整天的使用CURDATE() - INTERVAL 1 DAY。无论脚本何时运行,都将返回到前一天的开始。


对CURDATE()进行投票
抢劫



8

使用DATE_ADD或未正确看到任何答案DATE_SUB

从减去1天 NOW()

...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)

从添加1天 NOW()

...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)

1

当搜索字段是时间戳并且您想要查找昨天0小时和今天0小时之间的记录时,请使用构建

MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))  

代替

 now() - interval 1 day
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.