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

4 formas de cambiar la zona horaria en Oracle

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