我有一个名为items的表。它包含一个带有时区标识符的列tz(如America / New_York,Europe / London等)。
我想选择当前时间为8AM +/- 5分钟的所有项目。
因此,如果我在美国东部标准时间上午8点运行查询,它将返回tz ='America / New_York'的行。
如果我在东部时间上午9点运行查询,它将返回tz ='America / Chicago'的行。
答案 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'