2015-08-20 3 views
3

У меня есть таблица, в которой каждая строка представляет пользователя. Я также сохраняю часовой пояс пользователя в виде текста, такого как «Америка/Денвер», «Америка/Нью-Йорк» и т. Д.Вернуть строки на основе временной метки, соответствующей их часовому поясу

Возможно ли написать запрос, который будет возвращать пользователей, для которых их текущее время суток находится между 1 PM до 11 вечера в соответствии с их часовым поясом?

ответ

3

Учитывая эту таблицу:

CREATE TABLE usr (
    usr_id serial PRIMARY KEY 
, usr text NOT NULL 
, tz  text -- time zone names 
); 

Используйте AT TIME ZONE конструкцию:

SELECT *, (now() AT TIME ZONE tz)::time AS local_time 
FROM usr 
WHERE (now() AT TIME ZONE tz)::time BETWEEN '13:00'::time AND '23:00'::time; 

включая верхние и нижние пределы 1 PM и 11 PM.

SQL Fiddle.

Детали для AT TIME ZONE:

0

SELECT CONVERT_TZ (FROM_UNIXTIME (1196440219), 'GMT', 'America/Denver');

SELECT * FROM таблицы WHERE DATE_FORMAT (CONVERT_TZ (FROM_UNIXTIME (timestamp_column), 'GMT', 'Америка/Денвер'), '% H') между 13 и 23

+0

Я хочу строк, их текущее время суток в соответствии с часовым поясом, составляет от 1 до 11 вечера – Arya

Смежные вопросы