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.