AT TIME ZONE
po zastosowaniu do timestamp without timezone
tworzy timestamp with timezone
(i na odwrót). I ten timestamp with timezone
jest interpretowany w strefie czasowej sesji (co w twoim przypadku jest wymuszone na UTC
).
Tak więc wyrażenie EXTRACT (dow from time at time zone 'Brisbane/Australia')
nie wyodrębnia dnia w Brisbane o time
(UTC) , wyodrębnia dzień odpowiadający przekonwertowanemu time
z punktu widzenia osoby praktycznie żyjącej w strefie czasowej UTC.
Na przykład, kiedy to piszę, jeśli udaję, że jestem w 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
Dobrze, jest niedziela 18:01 w UTC i poniedziałek 04:01 w Brisbane
Ale jeśli zastosujesz przesunięcie strefy czasowej do 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
Zwróć uwagę, jak druga kolumna różni się od poprzedniego wyniku. W rzeczywistości jest to 20 godzin od Brisbane wyrażone w UTC:prawdopodobnie jest to technicznie poprawna odpowiedź na pytanie, które nie ma większego sensu.
Przypuszczalnie chcesz tego:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
które powinno odpowiedzieć:czy data i godzina time
mierzony w UTC odpowiada niedzieli w Brisbane?