Điều này được đề cập trong hướng dẫn sử dụng , nhưng không phải lúc nào cũng rõ ràng làm thế nào để thực sự làm việc với ngày / giờ. Thông số SQL hơi kỳ lạ.
Trong trường hợp câu hỏi của bạn, không rõ bạn có muốn lưu trữ thời gian bằng UTC hay không nhưng hiển thị nó theo giờ địa phương của máy chủ (TimeZone
), hoặc liệu bạn có muốn bỏ qua TimeZone
và luôn hiển thị nó dưới dạng UTC. Tôi sẽ giả sử cái sau.
Đối với dấu thời gian, bạn chỉ cần sử dụng AT TIME ZONE
hai lần, như:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Bạn cần sử dụng AT TIME ZONE
hai lần. Một lần để chuyển đổi đầu vào timestamp
đến timestamptz
theo múi giờ đối số, rồi đến múi giờ khác để chuyển đổi múi giờ đó thành timestamp
lúc UTC.
Thật không may vì cách (IMO điên rồ) mà đặc tả SQL xác định AT TIME ZONE
trong TIME
, bạn không thể làm điều tương tự trong TIME
. Bạn sẽ phải thao tác TimeZone
thay vào đó:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Điều này vẫn để lại cho bạn timetz
không phải là time
. Vì vậy, giá trị hiển thị của nó thay đổi theo timezone
cài đặt.