Функция извлечения PostgreSQL для часовых поясов - PullRequest
0 голосов
/ 07 февраля 2019

Я использую функцию PostgreSQL extract для извлечения месяца, квартала и года следующим образом:

select extract (month from adate) from atable

adate - это timestamp with time zone.

У меня проблемаявляется то, что я нахожу эту функцию полностью амбивалентной часового пояса, и я имею дело с базой данных с данными, которые зависят от часового пояса.Поэтому в некоторых случаях мне нужен результат в отношении тихоокеанского часового пояса, в других случаях мне нужен результат в отношении EST или CST и т. Д.

Есть ли способ получить месяц / квартал / год датыв отношении конкретного часового пояса?

1 Ответ

0 голосов
/ 07 февраля 2019

По сути, вы используете оператор AT TIME ZONE, чтобы преобразовать TIMESTAMP WITH TIMEZONE в TIMESTAMP WITHOUT TIMEZONE, а затем применить операцию date_part (AKA extract) к этому

Если вам нужен определенный часовой пояс:

  select extract(month from adate AT TIME ZONE 'CST' ) from atable;

Если вы хотите указать конкретное местоположение: оно будет следовать историческим правилам перехода на летнее время (и другим установленным законом изменениям часовых поясов) для прошлых дат и примет текущие правила для будущих дат.

  select extract(month from adate AT TIME ZONE 'America/Detroit' ) from atable;

возможно, использованная определенная функция поможет в спящем режиме.

 CREATE OR REPLACE FUNCTION date_part_in_zone
     ( part text, instant timestamptz, zone text) 
     returns double precision language sql as 
     'SELECT date_part(part, instant AT TIME ZONE zone)';

date_part выше - одна из функций, стоящих за «extract».

...