AT TIME ZONE
ketika diterapkan ke timestamp without timezone
menghasilkan timestamp with timezone
(dan sebaliknya). Dan timestamp with timezone
ditafsirkan dalam zona waktu sesi Anda (yang dalam kasus Anda dipaksa untuk UTC
).
Jadi ekspresi EXTRACT (dow from time at time zone 'Brisbane/Australia')
tidak mengekstrak hari di Brisbane pada time
(UTC) , ia mengekstrak hari yang sesuai dengan time
. yang dikonversi dari sudut pandang seseorang yang secara virtual tinggal di zona waktu UTC.
Sebagai contoh, ketika saya mengetik ini, jika berpura-pura dalam 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
Oke, ini hari Minggu 18:01 di UTC dan Senin 04:01 di Brisbane
Tetapi jika menerapkan perpindahan zona waktu ke 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
Perhatikan bagaimana kolom kedua berbeda dari hasil sebelumnya. Ini sebenarnya 20 jam dari Brisbane yang dinyatakan dalam UTC:ini mungkin jawaban yang benar secara teknis untuk pertanyaan yang tidak masuk akal.
Mungkin Anda menginginkan ini:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
yang harus menjawab:apakah tanggal dan waktu time
yang diukur dalam UTC sama dengan hari Minggu di Brisbane?