Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Konvertieren Sie die datetime-Spalte in UTC-Zeit

Beginnen Sie mit:to_char() gibt einen String von einem Datum zurück. Wenn Sie also ein date möchten , verwenden Sie es nicht, dh ersetzen Sie dies:

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

An:

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

Dann:Wenn es um die Verwaltung von Zeitzonen geht, müssen Sie den timestamp with time zone verwenden Datentyp statt date . Um Ihr Datum in Ortszeit umzuwandeln (dh die Zeitzone Ihrer Sitzung, die durch SESSIONTIMEZONE definiert wird ) in einen Zeitstempel umwandeln und das entsprechende Datum/Uhrzeit in UTC erhalten, können Sie Folgendes tun:

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

Ihre Anfrage:

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