En Oracle Database, las zonas horarias se pueden configurar 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 hacer esto, use el SET TIME_ZONE
cláusula de CREATE DATABASE
declaración.
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 la base de datos de Oracle 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, se establecerá de forma predeterminada en la zona horaria del sistema operativo del servidor.
También puede cambiar la configuración de la zona horaria actual para la base de datos. Para hacer esto, use el ALTER DATABASE
declaración.
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 TIMESTAMP WITH LOCAL TIME ZONE
columnas 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 a la zona horaria de la base de datos. Cuando regrese TIMESTAMP WITH LOCAL TIME ZONE
data, se devuelve en la zona horaria de la sesión actual.
La zona horaria de la sesión también surte efecto cuando TIMESTAMP
el valor se convierte a TIMESTAMP WITH TIME ZONE
o TIMESTAMP WITH LOCAL TIME ZONE
tipo de datos.
Puede hacer un par de cosas para establecer la zona horaria en el nivel de sesión.
Tél ORA_SDTZ
Variable de entorno
Puede establecer la zona horaria de la sesión con el ORA_SDTZ
Variable ambiental. 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 de UTC (por ejemplo,
'-04:00'
) - Nombre de región de zona horaria (por ejemplo,
'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 ORA_SDTZ
la variable es 'OD_TZ'
. Este valor se usa cuando la variable no está configurada o está configurada en un valor no válido.
El ALTER SESSION
Declaración
Puede cambiar la zona horaria para una sesión SQL específica con SET TIME_ZONE
cláusula de ALTER SESSION
declaración.
TIME_ZONE
se puede establecer en los siguientes valores:
- Zona horaria local predeterminada cuando se inició la sesión (
local
) - Zona horaria de la base de datos (
dbtimezone
) - Desplazamiento absoluto de UTC (por ejemplo,
'-04:00'
) - Nombre de región de zona horaria (por ejemplo,
'Canada/Eastern'
)
Aquí hay un ejemplo de cómo configurar TIME_ZONE
a tales 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 verificar la zona horaria de su sesión actual con SESSIONTIMEZONE
función.
Ejemplo:
SELECT SESSIONTIMEZONE FROM DUAL;
Resultado:
Australia/Brisbane
En mi caso, la zona horaria de la sesión está establecida en Australia/Brisbane.
La AT TIME ZONE
Cláusula
Una expresión de fecha y hora puede incluir un AT LOCAL
cláusula o una AT TIME ZONE
cláusula. Si incluye un AT LOCAL
cláusula, el resultado se devuelve en la zona horaria de la sesión actual. Si incluyes el AT TIME ZONE
cláusula, entonces 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)- Una 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é el FROM_TZ()
función para convertir un valor de marca de tiempo y una zona horaria en un TIMESTAMP WITH TIME ZONE
valor. Luego usé el AT TIME ZONE
cláusula para especificar una zona horaria diferente.
Aquí está el mismo ejemplo, excepto que esta vez especifico AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT LOCAL
FROM DUAL;
Resultado:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE