.Guía
En la base de datos Oracle, las zonas horarias se pueden establecer en varios lugares. A continuación se muestran cuatro formas de cambiar la zona horaria al usar Oracle.
Establecer la zona horaria de la base de datos
Puede establecer la zona horaria de la base de datos al crear la base de datos. Para ello, utilice la cláusula SET TIME_ZONE
de la instrucción CREATE DATABASE
.
Ejemplo:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
En este caso, utilicé un nombre de región de zona horaria. Consulte Cómo Devolver una Lista de zonas horarias válidas en Oracle Database para obtener una lista completa de nombres de regiones válidos en su sistema.
Alternativamente, puede usar un desplazamiento de zona horaria real:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
Si no establece explícitamente la zona horaria al crear la base de datos, el valor predeterminado es la zona horaria del sistema operativo del servidor.
También puede cambiar la configuración de zona horaria actual de la base de datos. Para ello, utilice la instrucción ALTER DATABASE
.
Ejemplo:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
Tenga en cuenta que la zona horaria de la base de datos solo es relevante para columnas TIMESTAMP WITH LOCAL TIME ZONE
. Además, Oracle recomienda que establezca la zona horaria de la base de datos en UTC (0:00) para evitar la conversión de datos y mejorar el rendimiento cuando los datos se transfieren entre bases de datos.
Establecer la zona horaria de la sesión
Puede establecer la zona horaria de la sesión de forma independiente en la zona horaria de la base de datos. Cuando devuelve datos TIMESTAMP WITH LOCAL TIME ZONE
, se devuelven en la zona horaria de la sesión actual.
La zona horaria de la sesión también tiene efecto cuando un valor TIMESTAMP
se convierte al tipo de datos TIMESTAMP WITH TIME ZONE
o TIMESTAMP WITH LOCAL TIME ZONE
.
Puede hacer un par de cosas para establecer la zona horaria a nivel de sesión.
La variable de entorno ORA_SDTZ
Puede establecer la zona horaria de la sesión con la variable de entorno ORA_SDTZ
. Esto se puede establecer en los siguientes valores:
- Zona horaria local del sistema operativo(
'OS_TZ'
) - Zona horaria de la base de datos (
'DB_TZ'
) - Desplazamiento absoluto desde UTC (p. ej.
'-04:00'
) - Nombre de la región de la zona horaria (p. ej.
'America/St_Kitts'
)
Estos son algunos ejemplos de configuración de esta variable de entorno en un entorno UNIX:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
El valor predeterminado de la variable ORA_SDTZ
es 'OD_TZ'
. Este valor se usa cuando la variable no está establecida o se establece en un valor no válido.
La instrucción ALTER SESSION
Puede cambiar la zona horaria de una sesión SQL específica con la cláusula SET TIME_ZONE
de la instrucción ALTER SESSION
.
TIME_ZONE
se puede configurar con los siguientes valores:
- Zona horaria local predeterminada cuando se inició la sesión(
local
) - Zona horaria de la base de datos (
dbtimezone
) - Desplazamiento absoluto desde UTC (p. ej.
'-04:00'
) - Nombre de la región de la zona horaria (p. ej.
'Canada/Eastern'
)
Aquí hay un ejemplo de establecer TIME_ZONE
a dichos valores:
ALTER SESSION SET TIME_ZONE=local;ALTER SESSION SET TIME_ZONE=dbtimezone;ALTER SESSION SET TIME_ZONE='Canada/Eastern';ALTER SESSION SET TIME_ZONE='-04:00';
Puede comprobar la zona horaria de su sesión actual con la función SESSIONTIMEZONE
.
Ejemplo:
SELECT SESSIONTIMEZONE FROM DUAL;
Resultado:
Australia/Brisbane
En mi caso, la zona horaria de la sesión se establece en Australia / Brisbane.
La Cláusula de ZONA HORARIA AT
Una expresión de fecha y hora puede incluir una cláusula AT LOCAL
o una cláusula AT TIME ZONE
. Si incluye una cláusula AT LOCAL
, el resultado se devuelve en la zona horaria de la sesión actual. Si incluye la cláusula AT TIME ZONE
, la zona horaria puede ser una de las siguientes:
- Un desplazamiento de zona horaria
- Un nombre de región de zona horaria
-
DBTIMEZONE
(esta función devuelve la zona horaria de la base de datos) -
SESSIONTIMEZONE
(esta función devuelve la zona horaria de la sesión actual) - Expresión que devuelve una cadena de caracteres con un formato de zona horaria válido.
Ejemplo:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;
Resultado:
02/JAN/30 04:30:35.000000000 AM +12:00
En este caso, utilicé la función FROM_TZ()
para convertir un valor de marca de tiempo y una zona horaria en un valor TIMESTAMP WITH TIME ZONE
. Luego usé la cláusula AT TIME ZONE
para especificar una zona horaria diferente.
Este es el mismo ejemplo, excepto que esta vez especifico AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
Resultado:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE