我有一个每分钟都会发送电子邮件的脚本。当它开始循环时,它会在数据库中查询所有等于当前utc时间的条目。我想让它找到数据库中与当前时间相对应的所有条目。
所以有一个'时间'列存储utc时间:'2009-03-06 20:18:31'。当它搜索时有没有办法忽略秒属性而不改变我存储时间的方式?
编辑:我正在使用mysql服务器。谢谢!
答案 0 :(得分:3)
在 MySQL :
中SELECT *
FROM table
WHERE time >= NOW() - INTERVAL EXTRACT(SECOND FROM NOW()) SECOND
AND time < NOW() - INTERVAL (EXTRACT(SECOND FROM NOW()) + 60) SECOND
这将有效地使用time
字段上的索引。
答案 1 :(得分:0)
我之前执行过这个逻辑:
查询:TimeField&gt; =(现在 - 1分钟)。
您还可以修改此逻辑以查询TimeField&gt; =(现在 - 当前分钟内传递的秒数) - 这可能更准确地检索您要查找的内容。
答案 2 :(得分:0)
确保对不等式的“现在”部分进行计算。在SQL Server中,您可以使用DATEADD(mi,-1,GETDATE())。如果在列上执行该功能,您可能最终会生成RBAR操作。
答案 3 :(得分:0)
where datediff(minute, Time, getdate()) = 0
这将适用于SQL Server,但由于您没有指定您正在使用的服务器,因此很难判断它是否适合您。
答案 4 :(得分:0)
这是我使用的实际sql语句。请注意,它受Quassnoi响应的影响很大,但存在一些关键差异。我使用了UTC_TIMESTAMP而不是NOW()。
select *
from table
where time < UTC_TIMESTAMP() + INTERVAL(1) MINUTE - INTERVAL (EXTRACT(SECOND FROM UTC_TIMESTAMP())) SECOND
and time >= UTC_TIMESTAMP() - INTERVAL (EXTRACT(SECOND FROM UTC_TIMESTAMP())) SECOND;