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

Cómo devolver una lista de zonas horarias válidas en Oracle Database

A veces necesitamos especificar una zona horaria cuando usamos funciones de fecha y hora en Oracle.

Pero hay muchas zonas horarias por ahí. ¿Cómo los recordamos a todos? ¿Y cómo sabemos que nuestro sistema es compatible con una zona horaria determinada?

Afortunadamente, podemos consultar el V$TIMEZONE_NAMES view para obtener una lista de zonas horarias válidas.

Obtener toda la información de la zona horaria

El siguiente código devuelve todas las filas y columnas de la vista:

SELECT * FROM V$TIMEZONE_NAMES;

Hay muchas filas en esta vista, pero así es como se ven las primeras 10 filas:

               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 
...

Podemos ver que cada nombre de región de zona horaria tiene más de una abreviatura correspondiente. Esto se adapta a cosas como el horario de verano, etc.

Aquí hay una tabla que describe el significado de algunas de las abreviaturas:

Abreviatura de zona horaria Significado
LMT Hora media local
PAGO Hora media de París
MOJADO Hora de Europa Occidental
OESTE Horario de verano de Europa occidental
CET Hora de Europa Central
CEST Horario de verano de Europa Central
EET Hora de Europa del Este
EST Horario de verano de Europa del Este

Obtener solo los nombres de las regiones

Podemos usar el DISTINCT o UNIQUE cláusula para devolver solo los nombres de región de zona horaria sin duplicados.

SELECT DISTINCT TZNAME 
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;

Así es como se ven las primeras 10 filas ahora:

               TZNAME 
_____________________ 
Africa/Abidjan        
Africa/Accra          
Africa/Addis_Ababa    
Africa/Algiers        
Africa/Asmara         
Africa/Asmera         
Africa/Bamako         
Africa/Bangui         
Africa/Banjul         
Africa/Bissau         
...

Obtener todas las abreviaturas de un nombre de zona horaria determinado

Este es un ejemplo de una consulta que devuelve todas las abreviaturas de un nombre de zona horaria determinado:

SELECT 
    TZNAME,
    TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;

Resultado:

             TZNAME    TZABBREV 
___________________ ___________ 
Australia/Sydney    LMT         
Australia/Sydney    AEDT        
Australia/Sydney    AEST        

Acerca de los archivos de zona horaria

En Oracle Database, los nombres de zona horaria están contenidos en archivos de zona horaria.

Puede consultar el V$TIMEZONE_FILE view para ver qué archivo de zona horaria está siendo utilizado actualmente por la base de datos.

Ejemplo:

SELECT * FROM V$TIMEZONE_FILE;

Resultado:

          FILENAME    VERSION    CON_ID 
__________________ __________ _________ 
timezlrg_32.dat            32         0 

Mi sistema usa la versión 32, que es el archivo de zona horaria predeterminado para Oracle 19c (que es lo que estoy usando). Este archivo se encuentra en la siguiente ubicación:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat

Consulte la documentación de Oracle para elegir un archivo de zona horaria para obtener más información sobre los archivos de zona horaria.