Pour commencer :to_char()
renvoie une chaîne à partir d'une date. Donc, si vous voulez une date
, ne l'utilisez pas, c'est-à-dire remplacez ceci :
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
Ensuite :lorsqu'il s'agit de gérer les fuseaux horaires, vous devez utiliser le timestamp with time zone
type de données au lieu de date
. Pour convertir votre date en heure locale (c'est-à-dire le fuseau horaire de votre session, qui est défini par SESSIONTIMEZONE
) à un horodatage et obtenir la date/heure correspondante en UTC, vous pouvez faire :
cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp with time zone)
at time zone 'UTC'
Votre requête :
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