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

Converter coluna de data e hora em hora utc


Para começar com:to_char() retorna uma string de uma data. Então, se você quiser uma date , não use, ou seja, substitua isso:
to_char(to_date(f_sta_date, 'YYYYMMDD') + (f_sta_time)/86400), 'YYYY-MM-DD HH24:MI:SS')

Para:
to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400

Então:quando se trata de gerenciar fusos horários, você precisa usar o timestamp with time zone tipo de dados em vez de date . Para converter sua data em hora local (ou seja, o fuso horário de sua sessão, que é definido por SESSIONTIMEZONE ) para um carimbo de data/hora e obter a data/hora correspondente em UTC, você pode fazer:
cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp with time zone) 
    at time zone 'UTC'

Sua pergunta:
select
    to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 dt_sta,
    to_date(f_sto_date, 'YYYYMMDD') + f_sto_time/86400 dt_sto,
    cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp) 
        at time zone 'UTC' dt_sta_utc,
    cast(to_date(f_sto_date, 'YYYYMMDD') + f_sto_time/86400 as timestamp) 
        at time zone 'UTC' dt_sto_utc
from t