No Oracle Database, o
SYS_EXTRACT_UTC()
A função extrai o UTC (Tempo Universal Coordenado) de um valor de data e hora com deslocamento de fuso horário ou nome de região de fuso horário. Sintaxe
A sintaxe fica assim:
SYS_EXTRACT_UTC(datetime_with_timezone)
Exemplo
Segue um exemplo para demonstrar:
SELECT
SYS_EXTRACT_UTC(TIMESTAMP '2035-08-25 10:30:45.123456789 +04:00')
FROM DUAL;
Resultado:
25/AUG/35 06:30:45.123456789 AM
O formato resultante depende do valor do seu
NLS_TIMESTAMP_FORMAT
parâmetro. O valor padrão deste parâmetro é derivado do NLS_TERRITORY
parâmetro. Alterar qualquer um deles pode alterar o formato do SYS_EXTRACT_UTC()
função para sua sessão. Exemplo:
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD-MON-RRRR HH24:MI:SSXFF';
SELECT
SYS_EXTRACT_UTC(TIMESTAMP '2035-08-25 10:30:45.123456789 +04:00')
FROM DUAL;
Resultado:
25-AUG-2035 06:30:45.123456789
E aqui está o que parece quando eu defino o
NLS_TERRITORY
parâmetro para AMERICA
:ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
SELECT
SYS_EXTRACT_UTC(TIMESTAMP '2035-08-25 10:30:45.123456789 +04:00')
FROM DUAL;
Resultado:
25-AUG-35 06.30.45.123456789 AM
Alterar este parâmetro define implicitamente o
NLS_TIMESTAMP_FORMAT
para o formato para AMERICA
. Consulte Como alterar o formato de data da sua sessão para obter mais informações e exemplos.
Nome da região do fuso horário
Como alternativa, você pode usar o nome da região do fuso horário em vez do deslocamento do fuso horário.
Exemplo:
SELECT
SYS_EXTRACT_UTC(TIMESTAMP '2035-08-25 10:30:45.123456789 Asia/Bangkok')
FROM DUAL;
Resultado:
25-AUG-35 03.30.45.123456789 AM
Fuso horário padrão
Se um fuso horário não for especificado, o datetime será associado ao fuso horário da sessão.
Exemplo:
SELECT SYS_EXTRACT_UTC(TIMESTAMP '2035-08-25 10:30:45.123456789')
FROM DUAL;
Resultado:
25-AUG-35 12.30.45.123456789 AM
Você pode verificar o fuso horário da sessão atual com o
SESSIONTIMEZONE
função:SELECT SESSIONTIMEZONE
FROM DUAL;
Resultado:
Australia/Brisbane
Consulte 4 maneiras de alterar o fuso horário no Oracle para obter exemplos de como alterar isso.
Argumentos nulos
Passando
null
resulta em um erro:SELECT SYS_EXTRACT_UTC(null)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT SYS_EXTRACT_UTC(null) FROM DUAL Error at Command Line : 1 Column : 24 Error report - SQL Error: ORA-30175: invalid type given for an argument 30175. 00000 - "invalid type given for an argument" *Cause: There is an argument with an invalid type in the argument list. *Action: Use the correct type wrapper for the argument.
Argumento ausente
Chamar a função com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:
SELECT SYS_EXTRACT_UTC()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT SYS_EXTRACT_UTC() 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: