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: