Oracle
 sql >> Base de données >  >> RDS >> Oracle

Convertir la colonne datetime en heure utc

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