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.