我有一张要发送的每日电子邮件表。所以我将一天中的时间存储为时间字段(00:00:00,没有日期)。几个示例行可能是:
mike, timeOfDay = 07:03 meaning "send mike an email daily at 7:03AM"
corey, timeOfDay = 23:30 meaning "send corey an email daily at 11:30PM"
在任何给定时间,我都想查找过去一小时内要发送的电子邮件。例如,如果我在早上 7:55 运行它,它应该会在早上 6:55 到早上 7:55 之间获取所有记录。这将包括迈克的电子邮件。如果脚本在上午 12:15 (00:15) 运行,它应该获取 11:15PM (23:15) 和 12:15AM (00:15) 之间的所有记录。这将包括 corey 的电子邮件。
我查看了SO和网络上的每个 示例,除了小时之外,它们似乎都需要日期。
尽可能接近:
SELECT
`notification`. *,
now() as now,
DATE_SUB( NOW( ) , INTERVAL 1 HOUR ) as 1hourAgo
FROM `notification`
WHERE (
`notification`.`timeofday` > DATE_SUB( NOW( ) , INTERVAL 1 HOUR )
)
AND (
`notification`.`timeofday` < NOW( )
)
我想出了一个 hack 来匹配这个小时和最后一个小时,在现在之前,但它看起来,嗯,hackish。必须有正确的方法来做到这一点!
这是我的黑客。
SELECT
`notification`. * ,
HOUR( NOW( ) ) AS HOUR ,
HOUR( DATE_SUB( NOW( ) ,
INTERVAL 1 HOUR ) ) AS 1hourago,
time( now( ) ) AS now
FROM `notification`
WHERE (
HOUR( `notification`.`timeofday` ) = HOUR( NOW( ) )
OR HOUR( `notification`.`timeofday` ) = HOUR( DATE_SUB( NOW( ) , INTERVAL 1 HOUR ) )
)
AND (
`notification`.`timeofday` < TIME( NOW( ) )
)
谢谢你的帮助!