AT TIME ZONE
khi được áp dụng cho timestamp without timezone
tạo timestamp with timezone
(và ngược lại). Và timestamp with timezone
được diễn giải theo múi giờ trong phiên của bạn (trong trường hợp của bạn, múi giờ này buộc phải UTC
).
Vì vậy, biểu thức EXTRACT (dow from time at time zone 'Brisbane/Australia')
không trích xuất ngày ở Brisbane vào thời điểm time
(UTC) , nó trích xuất ngày tương ứng với time
được chuyển đổi từ quan điểm của một người hầu như sống trong múi giờ UTC.
Ví dụ:khi tôi đang nhập nội dung này, nếu giả vờ đang ở 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
Được thôi, hôm nay là Chủ nhật 18:01 theo giờ UTC và 04:01 thứ Hai tại Brisbane
Nhưng nếu áp dụng dịch chuyển múi giờ cho 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
Chú ý cột thứ hai khác với kết quả trước đó như thế nào. Nó thực sự là 20 giờ tắt của Brisbane được thể hiện trong UTC:đó có lẽ là câu trả lời đúng về mặt kỹ thuật cho một câu hỏi không có nhiều ý nghĩa.
Có lẽ bạn muốn điều này:
EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
nên trả lời:ngày và giờ time
như được đo bằng UTC tương ứng với Chủ nhật ở Brisbane?