Понякога трябва да посочим часова зона, когато използваме функции за дата и час в Oracle.
Но там има много часови зони. Как да ги запомним всички? И как да разберем, че нашата система поддържа дадена часова зона?
За щастие можем да потърсим V$TIMEZONE_NAMES
преглед, за да върнете списък с валидни часови зони.
Вземете информация за всички часови зони
Следният код връща всички редове и колони от изгледа:
SELECT * FROM V$TIMEZONE_NAMES;
В този изглед има много редове, но ето как изглеждат първите 10 реда:
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 ...
Можем да видим, че всяко име на региона на часовата зона има повече от едно съответно съкращение. Това се грижи за неща като лятно часово време и др.
Ето таблица, която очертава какво означават някои от съкращенията:
Съкращение на часовата зона | Значение |
---|---|
LMT | Местно средно време |
PMT | Средно време в Париж |
МОКЛО | Западноевропейско време |
ЗАПАД | Западноевропейско лятно часово време |
CET | Централноевропейско време |
CEST | Централноевропейско лятно часово време |
EET | Източноевропейско време |
EEST | Източноевропейско лятно часово време |
Вземете само имената на регионите
Можем да използваме DISTINCT
или UNIQUE
клауза за връщане само на имената на регионите на часовата зона без дубликати.
SELECT DISTINCT TZNAME
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;
Ето как изглеждат първите 10 реда сега:
TZNAME _____________________ Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau ...
Вземете всички съкращения за дадено име на часова зона
Ето пример за заявка, която връща всички съкращения за дадено име на часова зона:
SELECT
TZNAME,
TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;
Резултат:
TZNAME TZABBREV ___________________ ___________ Australia/Sydney LMT Australia/Sydney AEDT Australia/Sydney AEST
Относно файловете с часови зони
В Oracle Database имената на часовите зони се съдържат във файловете за часови зони.
Можете да направите заявка за V$TIMEZONE_FILE
преглед, за да видите коя часова зона се използва в момента от базата данни.
Пример:
SELECT * FROM V$TIMEZONE_FILE;
Резултат:
FILENAME VERSION CON_ID __________________ __________ _________ timezlrg_32.dat 32 0
Моята система използва версия 32, която е файлът с часовата зона по подразбиране за Oracle 19c (което използвам). Този файл се намира на следното място:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat
Вижте документацията на Oracle за Избор на файл с часова зона за повече информация относно файловете с часовата зона.