Выберите предметы, где местное время ~ 8 утра - PullRequest
1 голос
/ 19 ноября 2009

У меня есть таблица предметов.Он содержит столбец tz с идентификаторами часовых поясов (например, Америка / Нью-Йорк, Европа / Лондон и т. Д.).

Я хочу выбрать все элементы с текущим временем 8:00 +/- 5 минут.

Так что, если я выполню запрос в 8:00 EST, он вернет строки, где tz = 'America / New_York'.Если я выполню запрос в 9:00 EST, он вернет строки, где tz = 'America / Chicago'.

Ответы [ 3 ]

1 голос
/ 07 января 2011
SELECT *
FROM items
WHERE CAST(current_timestamp at time zone tz AS time) BETWEEN '07:55' AND '08:05'
0 голосов
/ 19 ноября 2009

Ваше поле 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'
0 голосов
/ 19 ноября 2009

Вы должны хранить смещение для каждого часового пояса. Тогда запрос так же прост, как

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, если вы ищете правильные имена функций.

EDIT Если вы не можете добавить смещение в таблицу, создайте таблицу часовых поясов со строковым часовым поясом и числовым смещением. Присоединяйтесь и выполните приведенный выше запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...