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

Função NEW_TIME() no Oracle


No banco de dados Oracle, o NEW_TIME() A função converte a data de um fuso horário especificado para outro fuso horário especificado e retorna o resultado.

Sintaxe


A sintaxe fica assim:
NEW_TIME(date, timezone1, timezone2)

Assim, a função retorna a data e hora no fuso horário timezone2 quando data e hora no fuso horário timezone1 são date .

Observe que antes de usar esta função, você precisará definir o NLS_DATE_FORMAT parâmetro para exibir o horário de 24 horas.

Os argumentos timezone1 e timezone2 pode ser qualquer uma destas strings de texto:
AST ou ADT Atlantic Standard ou Daylight Time
BST ou BDT Horário padrão ou diurno de Bering
CST ou CDT Horário central ou horário de verão
EST ou EDT Horário padrão do leste ou horário de verão
GMT Hora Média de Greenwich
HST ou HDT Horário padrão do Alasca-Havaí ou horário de verão
MST ou MDT Mountain Standard ou Daylight Time
NST Horário padrão de Terra Nova
PST ou PDT Padrão do Pacífico ou Horário de Verão
YST ou YDT Horário padrão ou diurno de Yukon

Exemplo


Aqui está um exemplo:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

SELECT
    NEW_TIME(
        TO_DATE('2030-03-01 12:30:45', 'YYYY-MM-DD HH24:MI:SS'), 
        'AST', 
        'PST'
        )
FROM DUAL;

Resultado:
2030-03-01 08:30:45

Como mencionado, ao usar esta função o NLS_DATE_FORMAT O parâmetro precisa ser definido para exibir 24 horas, então é isso que a primeira linha faz no exemplo acima. Você pode omitir esta linha se o NLS_DATE_FORMAT da sua sessão parâmetro já usa 24 horas. Consulte Como definir o formato de data da sua sessão para obter mais exemplos de configuração do formato de data para a sessão atual.

Argumentos nulos


Se algum argumento for null , o resultado é null :
SET NULL 'null';

SELECT
    NEW_TIME(null, 'AST', 'ADT') AS "1",
    NEW_TIME(TO_DATE('2030-03-01 12:30:45', 'YYYY-MM-DD HH24:MI:SS'), null, 'ADT') AS "2",
    NEW_TIME(TO_DATE('2030-03-01 12:30:45', 'YYYY-MM-DD HH24:MI:SS'), 'AST', null) AS "3"
FROM DUAL;

Resultado:
      1       2       3 
_______ _______ _______ 
null    null    null   

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. Aqui eu especifiquei que a string null deve ser devolvido.

Argumento ausente


Chamando NEW_TIME() com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:
SELECT NEW_TIME()
FROM DUAL;

Resultado:
Error starting at line : 1 in command -
SELECT NEW_TIME()
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: