选择与时间对应的所有行

时间:2009-03-06 20:25:44

标签: sql mysql

我有一个每分钟都会发送电子邮件的脚本。当它开始循环时,它会在数据库中查询所有等于当前utc时间的条目。我想让它找到数据库中与当前时间相对应的所有条目。

所以有一个'时间'列存储utc时间:'2009-03-06 20:18:31'。当它搜索时有没有办法忽略秒属性而不改变我存储时间的方式?

编辑:我正在使用mysql服务器。

谢谢!

5 个答案:

答案 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;