По сути, вы используете оператор 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».