Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So geben Sie eine Liste gültiger Zeitzonen in der Oracle-Datenbank zurück

Manchmal müssen wir eine Zeitzone angeben, wenn wir datetime-Funktionen in Oracle verwenden.

Aber es gibt viele Zeitzonen da draußen. Wie erinnern wir uns an sie alle? Und woher wissen wir, dass unser System eine bestimmte Zeitzone unterstützt?

Glücklicherweise können wir V$TIMEZONE_NAMES abfragen view, um eine Liste gültiger Zeitzonen zurückzugeben.

Alle Zeitzoneninformationen erhalten

Der folgende Code gibt alle Zeilen und Spalten aus der Ansicht zurück:

SELECT * FROM V$TIMEZONE_NAMES;

Diese Ansicht enthält viele Zeilen, aber so sehen die ersten 10 Zeilen aus:

               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 
...

Wir können sehen, dass jeder Zeitzonenregionsname mehr als eine entsprechende Abkürzung hat. Dies berücksichtigt Dinge wie Sommerzeit usw.

Hier ist eine Tabelle, die umreißt, was einige der Abkürzungen bedeuten:

Zeitzonenabkürzung Bedeutung
LMT Ortszeit
PMT Pariser mittlere Zeit
NASS Westeuropäische Zeit
WEST Westeuropäische Sommerzeit
MEZ Mitteleuropäische Zeit
MESZ Mitteleuropäische Sommerzeit
EET Osteuropäische Zeit
EST Osteuropäische Sommerzeit

Nur die Regionsnamen erhalten

Wir können den DISTINCT verwenden oder UNIQUE -Klausel, um nur die Zeitzonenregionsnamen ohne Duplikate zurückzugeben.

SELECT DISTINCT TZNAME 
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;

So sehen die ersten 10 Zeilen jetzt aus:

               TZNAME 
_____________________ 
Africa/Abidjan        
Africa/Accra          
Africa/Addis_Ababa    
Africa/Algiers        
Africa/Asmara         
Africa/Asmera         
Africa/Bamako         
Africa/Bangui         
Africa/Banjul         
Africa/Bissau         
...

Alle Abkürzungen für einen bestimmten Zeitzonennamen erhalten

Hier ist ein Beispiel für eine Abfrage, die alle Abkürzungen für einen bestimmten Zeitzonennamen zurückgibt:

SELECT 
    TZNAME,
    TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;

Ergebnis:

             TZNAME    TZABBREV 
___________________ ___________ 
Australia/Sydney    LMT         
Australia/Sydney    AEDT        
Australia/Sydney    AEST        

Über Zeitzonendateien

In Oracle Database sind Zeitzonennamen in Zeitzonendateien enthalten.

Sie können die V$TIMEZONE_FILE abfragen Ansicht, um zu sehen, welche Zeitzonendatei gerade von der Datenbank verwendet wird.

Beispiel:

SELECT * FROM V$TIMEZONE_FILE;

Ergebnis:

          FILENAME    VERSION    CON_ID 
__________________ __________ _________ 
timezlrg_32.dat            32         0 

Mein System verwendet Version 32, die Standard-Zeitzonendatei für Oracle 19c (was ich verwende). Diese Datei befindet sich an folgendem Speicherort:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat

Weitere Informationen zu Zeitzonendateien finden Sie in der Oracle-Dokumentation zum Auswählen einer Zeitzonendatei.