За да започнете с:to_char()
връща низ от дата. Така че, ако искате date
, не го използвайте, т.е. заменете това:
to_char(to_date(f_sta_date, 'YYYYMMDD') + (f_sta_time)/86400), 'YYYY-MM-DD HH24:MI:SS')
До:
to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400
След това:когато става въпрос за управление на часови зони, трябва да използвате timestamp with time zone
тип данни вместо date
. За да преобразувате вашата дата в местно време (т.е. часовата зона на вашата сесия, която е дефинирана от SESSIONTIMEZONE
) към клеймо за време и да получите съответната дата/час по UTC, можете да направите:
cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp with time zone)
at time zone 'UTC'
Вашето запитване:
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