sql >> Databáze >  >> RDS >> Oracle

Jak vrátit seznam platných časových pásem v databázi Oracle

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.


  1. 10 důvodů, proč vaše firma potřebuje Microsoft Access

  2. Klasifikace dat v IRI Workbench

  3. Závažná chyba Wordpress:Nezachycená chyba:Volání nedefinované funkce mysql_connect() v /wp-includes/wp-db.php:1570

  4. Jak vygenerovat příkaz Přidat sloupec pro všechny tabulky v databázi na serveru SQL - SQL Server / Výukový program T-SQL, část 49