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: