Oracle
 sql >> Database >  >> RDS >> Oracle

Converti la colonna datetime in utc time

Per cominciare:to_char() restituisce una stringa da una data. Quindi se vuoi una date , non usarlo, cioè sostituisci questo:

to_char(to_date(f_sta_date, 'YYYYMMDD') + (f_sta_time)/86400), 'YYYY-MM-DD HH24:MI:SS')

A:

to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400

Quindi:quando si tratta di gestire i fusi orari, è necessario utilizzare il timestamp with time zone tipo di dati invece di date . Per convertire la data in ora locale (ovvero il fuso orario della sessione, definito da SESSIONTIMEZONE ) in un timestamp e ottenere la data/ora corrispondente in UTC, puoi fare:

cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp with time zone) 
    at time zone 'UTC'

La tua domanda:

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