Til at starte med:to_char()
returnerer en streng fra en dato. Så hvis du vil have en date
, brug det ikke, dvs. udskift dette:
to_char(to_date(f_sta_date, 'YYYYMMDD') + (f_sta_time)/86400), 'YYYY-MM-DD HH24:MI:SS')
Til:
to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400
Derefter:når det kommer til styring af tidszoner, skal du bruge timestamp with time zone
datatype i stedet for date
. At konvertere din dato til lokal tid (dvs. tidszonen for din session, som er defineret af SESSIONTIMEZONE
) til et tidsstempel og få den tilsvarende dato/tid ved UTC, kan du gøre:
cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp with time zone)
at time zone 'UTC'
Din forespørgsel:
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