MySQL 语句中是否有办法通过 >= NOW() -1 对记录进行排序(通过日期戳),以便选择从前一天到未来的所有记录?
问问题
329275 次
6 回答
364
从日期/时间函数的文档来看,您应该能够执行以下操作:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
于 2011-12-17T11:39:19.157 回答
73
请注意,结果可能与您的预期略有不同。
NOW()
返回一个DATETIME
。
并按名称工作,INTERVAL
例如INTERVAL 1 DAY = 24 hours
。
因此,如果您的脚本是 cron'd 在 运行03:00
,它将错过first three hours of records from the 'oldest' day
.
获得全天使用CURDATE() - INTERVAL 1 DAY
。无论脚本何时运行,这都会回到前一天的开始。
于 2014-06-06T17:16:09.743 回答
21
你快到了:它是NOW() - INTERVAL 1 DAY
于 2011-12-17T11:40:57.137 回答
18
没有正确使用DATE_ADD
or看到任何答案DATE_SUB
:
减去 1 天NOW()
...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
加 1 天NOW()
...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
于 2018-08-03T13:48:41.423 回答
8
你当然可以:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
于 2011-12-17T11:43:44.843 回答
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
于 2016-07-20T08:15:30.343 回答