En Oracle Database, el FROM_TZ() La función convierte un valor de marca de tiempo y una zona horaria en un TIMESTAMP WITH TIME ZONE valor.
Pasas el valor de la marca de tiempo y la zona horaria como dos argumentos separados, y la función los devuelve como un TIMESTAMP WITH TIME ZONE valor.
Sintaxis
La sintaxis es así:
FROM_TZ(timestamp_value, time_zone_value)
Donde timestamp_value es la marca de tiempo y time_zone_value es una cadena de caracteres en el formato 'TZH:TZM' o una expresión de carácter que devuelve una cadena en TZR con TZD opcional formato.
Ejemplo
He aquí un ejemplo:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL; Resultado:
01/JAN/30 12:30:35.000000000 PM -04:00
Especificación de la región de la zona horaria
Aquí hay un ejemplo que usa la región de la zona horaria en lugar del desplazamiento de la zona horaria:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL; Resultado:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Cambiar la zona horaria
Puedes usar AT LOCAL o AT TIME ZONE cláusula para cambiar la marca de tiempo resultante a una zona horaria diferente.
Ejemplo:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL; Resultado:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
Y aquí está usando AT LOCAL :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL; Resultado:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Puede utilizar el SESSIONTIMEZONE función para verificar la zona horaria de la sesión actual, y DBTIMEZONE para comprobar la zona horaria de la base de datos.
Zonas horarias no válidas
Pasar una zona horaria no válida da como resultado un error:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL; Resultado:
Error starting at line : 1 in command -
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL
Error report -
ORA-01882: timezone region not found
Puede obtener una lista de zonas horarias válidas consultando V$TIMEZONE_NAMES ver.
Esto es lo que sucede cuando proporcionamos una compensación de zona horaria que está fuera del rango aceptado:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL; Resultado:
Error starting at line : 1 in command -
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL
Error report -
ORA-01874: time zone hour must be between -15 and 15 Argumentos nulos
Pasando null para el primer argumento da como resultado un error:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL; Resultado:
Error starting at line : 1 in command -
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL
Error at Command Line : 2 Column : 13
Error report -
SQL Error: ORA-00932: inconsistent datatypes: expected TIMESTAMP got CHAR
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
Pasando null para el segundo argumento devuelve null :
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL; Resultado:
null
Tenga en cuenta que, de forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.
Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. En el ejemplo anterior, especifiqué que la cadena null debe ser devuelto.
Número de argumentos no válido
Pasar un número no válido de argumentos da como resultado un error:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL; Resultado:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: