从NOW() -1天选择记录

在MySQL语句中有一种方法来排序记录(通过日期戳)>= NOW() -1所以所有的记录从今天前一天到未来被选中?

381183 次浏览

根据日期/时间函数的文档来判断,你应该能够做这样的事情:

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

你差不多到了:它是NOW() - INTERVAL 1 DAY

你当然可以:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)

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

NOW()返回一个DATETIME

并且INTERVAL工作如命名,例如INTERVAL 1 DAY = 24 hours

因此,如果你的脚本被克隆为在03:00上运行,它将错过first three hours of records from the 'oldest' day

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

当搜索字段是时间戳,你想找到从昨天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

使用DATE_ADDDATE_SUB没有看到任何正确的答案:

NOW()减去1天

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

NOW()中添加1天

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