选择当地时间~8AM的项目

时间:2009-11-18 22:41:33

标签: postgresql

我有一个名为items的表。它包含一个带有时区标识符的列tz(如America / New_York,Europe / London等)。

我想选择当前时间为8AM +/- 5分钟的所有项目。

因此,如果我在美国东部标准时间上午8点运行查询,它将返回tz ='America / New_York'的行。
如果我在东部时间上午9点运行查询,它将返回tz ='America / Chicago'的行。

3 个答案:

答案 0 :(得分:1)

SELECT *
FROM items
WHERE CAST(current_timestamp at time zone tz AS time) BETWEEN '07:55' AND '08:05'

答案 1 :(得分:-1)

您应该为每个时区存储offset。然后查询就像

一样简单
select * from items where GETDATE() between 
   DATEADD(minute,5,DATEADD(HOUR,offset,GETUTCDATE())) and   
   DATEADD(minute,-5,DATEADD(HOUR,offset,GETUTCDATE()))

我正在使用SqlServer GETUTCDATE和DATEADD函数,但是如果查找正确的函数名,就可以轻松地使它们在postgresql中工作。

修改的 如果无法向表中添加偏移量,请使用字符串时区和数字偏移量创建时区表。加入并运行上述查询。

答案 2 :(得分:-1)

tz 字段如果符合以下条件,则有效:http://www.postgresql.org/docs/8.0/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE

如果是这样,我认为这应该有效(没有经过测试):

SELECT * 
FROM items 
WHERE LOCALTIMESTAMP BETWEEN 
(LOCALTIMESTAMP AT TIME ZONE tz) - interval '5 minutes' AND 
(LOCALTIMESTAMP AT TIME ZONE tz) + interval '5 minutes'