Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função SYS_EXTRACT_UTC() no Oracle


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: