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

3 maneiras de retornar o fuso horário de um valor de data e hora no Oracle


Abaixo estão três maneiras de retornar informações de fuso horário de um valor de data e hora no Oracle Database.

O EXTRACT() Função


O EXTRACT(datetime) A função é usada para extrair várias partes de data e hora de um valor de data e hora. Isso inclui as informações de fuso horário.

Aqui está um exemplo:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;

Resultado:
Australia/Darwin

Nesse caso, usei o TIMEZONE_REGION argumento para extrair a região do fuso horário.

Os argumentos disponíveis para extrair várias informações de fuso horário são:
  • TIMEZONE_HOUR
  • TIMEZONE_MINUTE
  • TIMEZONE_REGION
  • TIMEZONE_ABBR

Também é possível usar um TIMEZONE_OFFSET argumento, embora isso não apareça na sintaxe documentada do Oracle para esta função.

Aqui está um exemplo de como obter a abreviação do fuso horário:
SELECT 
    EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;

Resultado:
ACST

Observe que, ao usar os argumentos de fuso horário acima, o valor datetime deve ser avaliado como uma expressão do tipo de dados TIMESTAMP WITH TIME ZONE ou TIMESTAMP WITH LOCAL TIME ZONE .

O EXTRACT() A função também aceita argumentos para outras partes de data e hora, como YEAR , MONTH , HOUR , etc

O TO_CHAR(datetime) Função


Também podemos usar o TO_CHAR(datetime) funcionam como um método alternativo para obter informações de fuso horário de um valor de data e hora.

Esta função aceita o valor datetime ou interval como seu primeiro argumento e um modelo de formato como seu segundo argumento. A função então converte o valor para um tipo de dados de VARCHAR2 no formato especificado.

O modelo de formato especifica o formato para o qual retornar o valor de data/hora/intervalo. O modelo de formato consiste em um ou mais elementos de formato. Isso nos permite elaborar cuidadosamente os resultados para refletir o formato desejado.

Se quisermos apenas retornar informações de fuso horário, podemos usar um dos elementos de formato para essa finalidade específica.

Existem alguns elementos de formato diferentes que podemos usar ao retornar informações de fuso horário de um valor de data e hora.

Vamos começar com o TZR elemento de formato:
SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZR'
    )
FROM DUAL;

Resultado:
AUSTRALIA/DARWIN

Este elemento de formato retorna a região do fuso horário. Se o valor datetime incluir apenas o deslocamento de fuso horário, isso será retornado.

O TZD elemento de formato pode ser usado para retornar informações de horário de verão. Ele retorna as informações de fuso horário de forma abreviada.

Exemplo:
SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZD'
    )
FROM DUAL;

Resultado:
ACST

Alternativamente, podemos usar o TZH e TZM elementos de formato para retornar as horas e minutos do fuso horário, com base no deslocamento do fuso horário.
SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZH:TZM'
    )
FROM DUAL;

Resultado:
+09:30

O TZ_OFFSET() Função


O TZ_OFFSET() A função retorna o deslocamento de fuso horário correspondente ao argumento com base na data em que a instrução é executada.

Aqui está um exemplo de uso de TZ_OFFSET() para retornar o deslocamento de fuso horário com base na região de fuso horário retornada pelo o EXTRACT() função:
SELECT TZ_OFFSET(
    EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;

Resultado:
+09:30

Também podemos passar SESSIONTIMEZONE ou DBTIMEZONE para TZ_OFFSET() para retornar o fuso horário de nossa sessão atual e banco de dados, respectivamente:
SELECT 
    TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
    TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;

Resultado:
   Session        DB 
__________ _________ 
+10:00     +00:00