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