No banco de dados Oracle, o
FROM_TZ()
função converte um valor de timestamp e um fuso horário em um TIMESTAMP WITH TIME ZONE
valor. Você passa o valor do timestamp e o fuso horário como dois argumentos separados, e a função os retorna como um
TIMESTAMP WITH TIME ZONE
valor. Sintaxe
A sintaxe fica assim:
FROM_TZ(timestamp_value, time_zone_value)
Onde
timestamp_value
é o carimbo de data/hora e time_zone_value
é uma cadeia de caracteres no formato 'TZH:TZM'
ou uma expressão de caractere que retorna uma string em TZR
com opcional TZD
formato. Exemplo
Aqui está um exemplo:
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
Especificando a região do fuso horário
Aqui está um exemplo que usa a região do fuso horário em vez do deslocamento do fuso horário:
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
Alterar o fuso horário
Você pode usar
AT LOCAL
ou AT TIME ZONE
cláusula para alterar o carimbo de data/hora resultante para um fuso horário diferente. Exemplo:
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
E aqui 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
Você pode usar o
SESSIONTIMEZONE
função para verificar o fuso horário da sessão atual e DBTIMEZONE
para verificar o fuso horário do banco de dados. Fusos horários inválidos
Passar um fuso horário inválido resulta em um erro:
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
Você pode obter uma lista de regiões de fuso horário válidas consultando o
V$TIMEZONE_NAMES
visualizar. Veja o que acontece quando fornecemos um deslocamento de fuso horário que está fora do intervalo aceito:
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
Passando
null
para o primeiro argumento resulta em um erro: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:
Passando
null
para o segundo argumento retorna null
:SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Resultado:
null
Observe que, por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. No exemplo acima, especifiquei que a string null
deve ser devolvido. Número inválido de argumentos
Passar um número inválido de argumentos resulta em um erro:
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: