关于sql:PostgreSQL查询当前时间

PostgreSQL query for current minute

我的Web应用程序需要获取所有具有此分钟时间值的项目的结果。我的表有一个时间属性

1
id, message, TIME, ...,

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

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

1
2
3
4
5
6
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

谢谢


我会尝试这样的事情:

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

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


简单地比较截断的时间戳怎么办?

1
2
3
SELECT *
  FROM notification n
 WHERE date_trunc('minute', n.time) = date_trunc('minute', CURRENT_TIMESTAMP);

我怀疑优化器是否足够聪明,可以使用这种方法在time列上使用索引。如果您有这样的索引,那么您应该使用Luk吗???? Lalinsk ??的建议,如果您想获得更好的性能。取决于您实际拥有的数据量。