Đôi khi chúng ta cần chỉ định múi giờ khi sử dụng các hàm datetime trong Oracle.
Nhưng có rất nhiều múi giờ ngoài kia. Làm thế nào để chúng ta nhớ tất cả chúng? Và làm cách nào để biết hệ thống của mình hỗ trợ một múi giờ nhất định?
May mắn thay, chúng tôi có thể truy vấn V$TIMEZONE_NAMES
xem để trả về danh sách các múi giờ hợp lệ.
Nhận tất cả thông tin về múi giờ
Đoạn mã sau trả về tất cả các hàng và cột từ dạng xem:
SELECT * FROM V$TIMEZONE_NAMES;
Có rất nhiều hàng trong chế độ xem này, nhưng đây là 10 hàng đầu tiên trông như thế nào:
TZNAME TZABBREV CON_ID _____________________ ___________ _________ Africa/Abidjan LMT 0 Africa/Abidjan GMT 0 Africa/Accra LMT 0 Africa/Accra GMT 0 Africa/Accra +0020 0 Africa/Addis_Ababa LMT 0 Africa/Addis_Ababa EAT 0 Africa/Addis_Ababa +0230 0 Africa/Addis_Ababa +0245 0 Africa/Algiers LMT 0 ...
Chúng ta có thể thấy rằng mỗi tên khu vực múi giờ có nhiều hơn một chữ viết tắt tương ứng. Điều này phục vụ cho những việc như tiết kiệm ánh sáng ban ngày, v.v.
Dưới đây là bảng trình bày ý nghĩa của một số từ viết tắt:
Tên viết tắt của múi giờ | Ý nghĩa |
---|---|
LMT | Giờ trung bình địa phương |
PMT | Giờ trung bình Paris |
HẾT | Giờ Tây Âu |
TÂY | Giờ mùa hè Tây Âu |
CET | Giờ Trung Âu |
CEST | Giờ mùa hè Trung Âu |
HẾT | Giờ Đông Âu |
EEST | Giờ mùa hè Đông Âu |
Chỉ lấy tên vùng
Chúng tôi có thể sử dụng DISTINCT
hoặc UNIQUE
mệnh đề chỉ trả về tên khu vực múi giờ mà không bị trùng lặp.
SELECT DISTINCT TZNAME
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;
Dưới đây là giao diện của 10 hàng đầu tiên:
TZNAME _____________________ Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau ...
Nhận tất cả chữ viết tắt cho tên múi giờ nhất định
Dưới đây là ví dụ về truy vấn trả về tất cả các chữ viết tắt của tên múi giờ nhất định:
SELECT
TZNAME,
TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;
Kết quả:
TZNAME TZABBREV ___________________ ___________ Australia/Sydney LMT Australia/Sydney AEDT Australia/Sydney AEST
Giới thiệu về tệp múi giờ
Trong Cơ sở dữ liệu Oracle, tên múi giờ được chứa trong các tệp múi giờ.
Bạn có thể truy vấn V$TIMEZONE_FILE
để xem tệp múi giờ nào hiện đang được cơ sở dữ liệu sử dụng.
Ví dụ:
SELECT * FROM V$TIMEZONE_FILE;
Kết quả:
FILENAME VERSION CON_ID __________________ __________ _________ timezlrg_32.dat 32 0
Hệ thống của tôi đang sử dụng phiên bản 32, là tệp múi giờ mặc định cho Oracle 19c (là những gì tôi đang sử dụng). Tệp này nằm ở vị trí sau:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat
Xem tài liệu của Oracle về Chọn tệp múi giờ để biết thêm thông tin về tệp múi giờ.