sql >> Base de Datos >  >> RDS >> Oracle

3 formas de devolver la zona horaria a partir de un valor de fecha y hora en Oracle

A continuación se muestran tres formas de devolver información de zona horaria a partir de un valor de fecha y hora en Oracle Database.

El EXTRACT() Función

El EXTRACT(datetime) La función se utiliza para extraer varias partes de fecha y hora de un valor de fecha y hora. Esto incluye la información de la zona horaria.

He aquí un ejemplo:

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

Resultado:

Australia/Darwin

En este caso, utilicé el TIMEZONE_REGION argumento para extraer la región de la zona horaria.

Los argumentos disponibles para extraer información de varias zonas horarias son:

  • TIMEZONE_HOUR
  • TIMEZONE_MINUTE
  • TIMEZONE_REGION
  • TIMEZONE_ABBR

También es posible usar un TIMEZONE_OFFSET argumento, aunque esto no aparece en la sintaxis documentada de Oracle para esta función.

Este es un ejemplo de cómo obtener la abreviatura de la zona horaria:

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

Resultado:

ACST

Tenga en cuenta que, al usar los argumentos de zona horaria anteriores, el valor de fecha y hora debe evaluarse como una expresión de tipo de datos TIMESTAMP WITH TIME ZONE o TIMESTAMP WITH LOCAL TIME ZONE .

El EXTRACT() La función también acepta argumentos para otras partes de fecha y hora, como YEAR , MONTH , HOUR , etc.

El TO_CHAR(datetime) Función

También podemos usar el TO_CHAR(datetime) funcionan como un método alternativo para obtener información de la zona horaria a partir de un valor de fecha y hora.

Esta función acepta el valor de fecha y hora o intervalo como primer argumento y un modelo de formato como segundo argumento. La función luego convierte el valor a un tipo de datos de VARCHAR2 en el formato especificado.

El modelo de formato especifica el formato para el que devolver el valor de fechahora/intervalo. El modelo de formato consta de uno o más elementos de formato. Esto nos permite diseñar cuidadosamente los resultados para reflejar nuestro formato deseado.

Si solo queremos devolver la información de la zona horaria, podemos usar uno de los elementos de formato para ese propósito específico.

Hay algunos elementos de formato diferentes que podemos usar al devolver información de zona horaria de un valor de fecha y hora.

Comencemos con el TZR elemento de formato:

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

Resultado:

AUSTRALIA/DARWIN

Este elemento de formato devuelve la región de la zona horaria. Si el valor de fecha y hora solo incluye el desplazamiento de la zona horaria, se devuelve eso en su lugar.

El TZD El elemento de formato se puede utilizar para devolver información sobre el horario de verano. Devuelve la información de la zona horaria en forma abreviada.

Ejemplo:

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

Resultado:

ACST

Alternativamente, podemos usar el TZH y TZM elementos de formato para devolver las horas y los minutos de la zona horaria, en función del desplazamiento de la zona horaria.

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

Resultado:

+09:30

El TZ_OFFSET() Función

El TZ_OFFSET() La función devuelve el desplazamiento de la zona horaria correspondiente al argumento en función de la fecha en que se ejecuta la instrucción.

Aquí hay un ejemplo del uso de TZ_OFFSET() para devolver el desplazamiento de la zona horaria en función de la región de la zona horaria devuelta por el EXTRACT() función:

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

Resultado:

+09:30

También podemos pasar SESSIONTIMEZONE o DBTIMEZONE a TZ_OFFSET() para devolver la zona horaria de nuestra sesión actual y base de datos respectivamente:

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

Resultado:

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