Im Folgenden finden Sie drei Möglichkeiten, Zeitzoneninformationen aus einem datetime-Wert in der Oracle-Datenbank zurückzugeben.
Der EXTRACT()
Funktion
Der EXTRACT(datetime)
Die Funktion wird zum Extrahieren verschiedener datetime-Teile aus einem datetime-Wert verwendet. Dazu gehören die Zeitzoneninformationen.
Hier ist ein Beispiel:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;
Ergebnis:
Australia/Darwin
In diesem Fall habe ich die TIMEZONE_REGION
verwendet Argument zum Extrahieren der Zeitzonenregion.
Die verfügbaren Argumente zum Extrahieren verschiedener Zeitzoneninformationen sind:
TIMEZONE_HOUR
TIMEZONE_MINUTE
TIMEZONE_REGION
TIMEZONE_ABBR
Es ist auch möglich, einen TIMEZONE_OFFSET
zu verwenden Argument, obwohl dies nicht in der dokumentierten Syntax von Oracle für diese Funktion erscheint.
Hier ist ein Beispiel für das Abrufen der Abkürzung der Zeitzone:
SELECT
EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;
Ergebnis:
ACST
Beachten Sie, dass bei Verwendung der obigen Zeitzonenargumente der datetime-Wert zu einem Ausdruck des Datentyps TIMESTAMP WITH TIME ZONE
ausgewertet werden muss oder TIMESTAMP WITH LOCAL TIME ZONE
.
Der EXTRACT()
Die Funktion akzeptiert auch Argumente für andere datetime-Teile, wie z. B. YEAR
, MONTH
, HOUR
usw.
Der TO_CHAR(datetime)
Funktion
Wir können auch TO_CHAR(datetime)
verwenden Funktion als alternative Methode, um Zeitzoneninformationen aus einem datetime-Wert zu erhalten.
Diese Funktion akzeptiert den datetime- oder Intervallwert als erstes Argument und ein Formatmodell als zweites Argument. Die Funktion konvertiert dann den Wert in einen Datentyp von VARCHAR2
im angegebenen Format.
Das Formatmodell gibt das Format an, für das der datetime/interval-Wert zurückgegeben werden soll. Das Formatmodell besteht aus einem oder mehreren Formatelementen. Dies ermöglicht es uns, die Ergebnisse sorgfältig so zu gestalten, dass sie unser gewünschtes Format widerspiegeln.
Wenn wir nur Zeitzoneninformationen zurückgeben möchten, können wir eines der Formatelemente für diesen speziellen Zweck verwenden.
Es gibt einige verschiedene Formatelemente, die wir verwenden können, wenn wir Zeitzoneninformationen aus einem datetime-Wert zurückgeben.
Beginnen wir mit dem TZR
Formatelement:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZR'
)
FROM DUAL;
Ergebnis:
AUSTRALIA/DARWIN
Dieses Formatelement gibt die Region der Zeitzone zurück. Wenn der datetime-Wert nur den Zeitzonenoffset enthält, wird dieser stattdessen zurückgegeben.
Das TZD
format-Element kann verwendet werden, um Informationen zur Sommerzeit zurückzugeben. Es gibt die Zeitzoneninformationen in abgekürzter Form zurück.
Beispiel:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZD'
)
FROM DUAL;
Ergebnis:
ACST
Alternativ können wir den TZH
verwenden und TZM
format-Elemente, um die Stunden und Minuten der Zeitzone basierend auf dem Zeitzonen-Offset zurückzugeben.
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZH:TZM'
)
FROM DUAL;
Ergebnis:
+09:30
Der TZ_OFFSET()
Funktion
Der TZ_OFFSET()
Die Funktion gibt den Zeitzonenoffset zurück, der dem Argument entspricht, basierend auf dem Datum, an dem die Anweisung ausgeführt wird.
Hier ist ein Beispiel für die Verwendung von TZ_OFFSET()
um den Zeitzonenoffset basierend auf der von dem EXTRACT()
zurückgegebenen Zeitzonenregion zurückzugeben Funktion:
SELECT TZ_OFFSET(
EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;
Ergebnis:
+09:30
Wir können auch SESSIONTIMEZONE
übergeben oder DBTIMEZONE
zu TZ_OFFSET()
um die Zeitzone unserer aktuellen Sitzung bzw. Datenbank zurückzugeben:
SELECT
TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;
Ergebnis:
Session DB __________ _________ +10:00 +00:00