Oracle
 sql >> Database >  >> RDS >> Oracle

3 modi per restituire il fuso orario da un valore DateTime in Oracle

Di seguito sono riportati tre modi per restituire le informazioni sul fuso orario da un valore datetime in Oracle Database.

Il EXTRACT() Funzione

Il EXTRACT(datetime) La funzione viene utilizzata per estrarre varie parti datetime da un valore datetime. Ciò include le informazioni sul fuso orario.

Ecco un esempio:

SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;

Risultato:

Australia/Darwin

In questo caso, ho usato il TIMEZONE_REGION argomento per estrarre la regione del fuso orario.

Gli argomenti disponibili per estrarre varie informazioni sul fuso orario sono:

  • TIMEZONE_HOUR
  • TIMEZONE_MINUTE
  • TIMEZONE_REGION
  • TIMEZONE_ABBR

È anche possibile utilizzare un TIMEZONE_OFFSET argomento, sebbene questo non appaia nella sintassi documentata di Oracle per questa funzione.

Ecco un esempio di come ottenere l'abbreviazione del fuso orario:

SELECT 
    EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;

Risultato:

ACST

Si noti che, quando si utilizzano gli argomenti del fuso orario precedenti, il valore datetime deve restituire un'espressione del tipo di dati TIMESTAMP WITH TIME ZONE o TIMESTAMP WITH LOCAL TIME ZONE .

Il EXTRACT() La funzione accetta anche argomenti per altre parti datetime, come YEAR , MONTH , HOUR , ecc.

Il TO_CHAR(datetime) Funzione

Possiamo anche usare TO_CHAR(datetime) funziona come metodo alternativo per ottenere informazioni sul fuso orario da un valore datetime.

Questa funzione accetta il valore datetime o interval come primo argomento e un modello di formato come secondo argomento. La funzione converte quindi il valore in un tipo di dati di VARCHAR2 nel formato specificato.

Il modello di formato specifica il formato per il quale restituire il valore datetime/intervallo. Il modello di formato è costituito da uno o più elementi di formato. Questo ci consente di elaborare con cura i risultati per riflettere il formato desiderato.

Se vogliamo solo restituire informazioni sul fuso orario, possiamo utilizzare uno degli elementi di formato per quello scopo specifico.

Esistono alcuni elementi di formato diversi che possiamo utilizzare quando si restituiscono informazioni sul fuso orario da un valore datetime.

Iniziamo con il TZR elemento di formato:

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZR'
    )
FROM DUAL;

Risultato:

AUSTRALIA/DARWIN

Questo elemento di formato restituisce l'area del fuso orario. Se il valore datetime include solo l'offset del fuso orario, viene invece restituito quello.

Il TZD l'elemento format può essere utilizzato per restituire le informazioni sull'ora legale. Restituisce le informazioni sul fuso orario in forma abbreviata.

Esempio:

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZD'
    )
FROM DUAL;

Risultato:

ACST

In alternativa, possiamo usare il TZH e TZM formattare gli elementi per restituire le ore e i minuti del fuso orario, in base all'offset del fuso orario.

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZH:TZM'
    )
FROM DUAL;

Risultato:

+09:30

Il TZ_OFFSET() Funzione

Il TZ_OFFSET() La funzione restituisce l'offset del fuso orario corrispondente all'argomento in base alla data di esecuzione dell'istruzione.

Ecco un esempio di utilizzo di TZ_OFFSET() per restituire l'offset del fuso orario in base alla regione del fuso orario restituita da the EXTRACT() funzione:

SELECT TZ_OFFSET(
    EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;

Risultato:

+09:30

Possiamo anche passare SESSIONTIMEZONE o DBTIMEZONE a TZ_OFFSET() per restituire rispettivamente il fuso orario della sessione e del database correnti:

SELECT 
    TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
    TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;

Risultato:

   Session        DB 
__________ _________ 
+10:00     +00:00