PostgreSQL查询当前分钟

时间:2010-08-05 16:27:10

标签: sql postgresql jdbc

我的网络应用程序需要获取所有具有本分钟时间价值的项目的结果。我的表有时间属性

id, message, time, ...,

其中time是带时区的timestamp类型。 我需要获得所有条目的列表,其中时间是当前分钟。比较整个值不匹配,因为时间戳具有微秒分辨率。

目前我使用以下查询返回此列表并且它可以正常工作,但我认为应该有一种更有效的方法。

SELECT * FROM notification WHERE 
 date_part('year', time) = date_part('year', current_date) AND 
 date_part('month', time) = date_part('month', current_date) AND 
 date_part('day', time) = date_part('day', current_date) AND 
 date_part('hour', time) = date_part('hour', current_time) AND 
 date_part('minute', time) = date_part('minute', current_time);

我也想知道如何获得这个和前一分钟或最后'n'分钟的结果。 数据库是PostgreSQL 8.4.3

由于

2 个答案:

答案 0 :(得分:3)

我会尝试这样的事情:

WHERE
    time >= date_trunc('minute', now()) AND
    time < date_trunc('minute', now()) + INTERVAL '1 minute';

这将定义边界并搜索该范围内的时间,这意味着它仍然可以使用time列上您(或应该拥有)的索引。

答案 1 :(得分:2)

如何简单地比较截断的时间戳?

SELECT *
  FROM notification n
 WHERE date_trunc('minute', n.time) = date_trunc('minute', current_timestamp);

我怀疑优化器是否足够聪明,可以使用这种方法在time列上使用索引。如果你有这样的索引,那么你应该使用LukášLalinský的建议,如果你想要更好的表现。取决于你有多少数据。