Někdy potřebujeme určit časové pásmo při používání funkcí datetime v Oracle.
Ale je tam spousta časových pásem. Jak si je všechny pamatujeme? A jak víme, že náš systém podporuje dané časové pásmo?
Naštěstí se můžeme dotazovat na V$TIMEZONE_NAMES
zobrazení zobrazí seznam platných časových pásem.
Získejte informace o všech časových pásmech
Následující kód vrátí všechny řádky a sloupce ze zobrazení:
SELECT * FROM V$TIMEZONE_NAMES;
V tomto zobrazení je mnoho řádků, ale prvních 10 řádků vypadá takto:
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 ...
Vidíme, že každý název oblasti časového pásma má více než jednu odpovídající zkratku. To zajišťuje věci, jako je letní čas atd.
Zde je tabulka, která nastiňuje, co některé zkratky znamenají:
Zkratka časového pásma | Význam |
---|---|
LMT | Místní střední čas |
PMT | Pařížský střední čas |
MOKRÉ | Západoevropský čas |
ZÁPAD | Západoevropský letní čas |
SEČ | Čas střední Evropy |
CEST | Letní čas střední Evropy |
EET | Východoevropský čas |
EEST | Letní čas východní Evropy |
Získejte pouze názvy regionů
Můžeme použít DISTINCT
nebo UNIQUE
klauzule, která vrátí pouze názvy oblastí časového pásma bez duplikátů.
SELECT DISTINCT TZNAME
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;
Prvních 10 řádků nyní vypadá takto:
TZNAME _____________________ Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau ...
Získat všechny zkratky pro daný název časového pásma
Zde je příklad dotazu, který vrací všechny zkratky pro daný název časového pásma:
SELECT
TZNAME,
TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;
Výsledek:
TZNAME TZABBREV ___________________ ___________ Australia/Sydney LMT Australia/Sydney AEDT Australia/Sydney AEST
O souborech časového pásma
V databázi Oracle jsou názvy časových pásem obsaženy v souborech časových pásem.
Můžete zadat dotaz na V$TIMEZONE_FILE
zobrazit, abyste viděli, který soubor časového pásma databáze aktuálně používá.
Příklad:
SELECT * FROM V$TIMEZONE_FILE;
Výsledek:
FILENAME VERSION CON_ID __________________ __________ _________ timezlrg_32.dat 32 0
Můj systém používá verzi 32, což je výchozí soubor časového pásma pro Oracle 19c (což je to, co používám). Tento soubor se nachází v následujícím umístění:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat
Další informace o souborech časového pásma najdete v dokumentaci Oracle pro výběr souboru časového pásma.