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

3 Möglichkeiten, die Zeitzone von einem Datetime-Wert in Oracle zurückzugeben

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