Till att börja med:to_char()
returnerar en sträng från ett datum. Så om du vill ha ett date
, använd den inte, dvs ersätt den här:
to_char(to_date(f_sta_date, 'YYYYMMDD') + (f_sta_time)/86400), 'YYYY-MM-DD HH24:MI:SS')
Till:
to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400
Sedan:när det kommer till att hantera tidszoner måste du använda timestamp with time zone
datatyp istället för date
. För att konvertera ditt datum till lokal tid (dvs. tidszonen för din session, som definieras av SESSIONTIMEZONE
) till en tidsstämpel och få motsvarande datum/tid vid UTC kan du göra:
cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp with time zone)
at time zone 'UTC'
Din fråga:
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