AT TIME ZONE
когато се прилага към timestamp without timezone
създава timestamp with timezone
(и обратното). И този timestamp with timezone
се интерпретира в часовата зона на вашата сесия (която във вашия случай е принудена да UTC
).
Така че изразът EXTRACT (dow from time at time zone 'Brisbane/Australia')
не извлича деня в Бризбейн в time
(UTC) , той извлича деня, съответстващ на преобразуваното time
от гледна точка на някой, който на практика живее в часовата зона UTC.
Като пример, когато пиша това, ако се преструвам, че съм в UTC:
=> set timezone to 'UTC'; => select now(),now() at time zone 'Australia/Brisbane'; now | timezone ------------------------------+--------------------------- 2013-10-27 18:01:03.15286+00 | 2013-10-28 04:01:03.15286
Добре, неделя е 18:01 по UTC и понеделник 04:01 в Бризбейн
Но ако приложите изместването на часовата зона към timestamp without timezone
:
select now(),now()::timestamp at time zone 'Australia/Brisbane'; now | timezone -------------------------------+------------------------------- 2013-10-27 18:01:57.878541+00 | 2013-10-27 08:01:57.878541+00
Забележете как втората колона се различава от предишния резултат. Всъщност е 20 часа разстояние от Бризбейн, изразено в UTC:вероятно това е технически правилният отговор на въпрос, който няма много смисъл.
Вероятно искате това:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
който трябва да отговори:дали датата и часът са time
измерено в UTC съответства на неделя в Бризбейн?