【发布时间】:2012-01-22 14:04:02
【问题描述】:
在 MySQL 语句中是否可以通过 >= NOW() -1 对记录进行排序(通过日期戳),以便选择从前一天到未来的所有记录?
【问题讨论】:
标签: mysql select where datestamp
在 MySQL 语句中是否可以通过 >= NOW() -1 对记录进行排序(通过日期戳),以便选择从前一天到未来的所有记录?
【问题讨论】:
标签: mysql select where datestamp
根据documentation for date/time functions 判断,您应该能够执行以下操作:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= 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。无论脚本何时运行,这都会返回到前一天的开始。
【讨论】:
你就快到了:它是NOW() - INTERVAL 1 DAY
【讨论】:
使用DATE_ADD 或DATE_SUB 没有正确看到任何答案:
从NOW() 中减去 1 天
...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
从NOW()添加 1 天
...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
【讨论】:
当然可以:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
【讨论】:
DATE_ADD 然后-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
【讨论】: