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

Konvertierung von Oracle-Zeitzonen (mit from_tz)

to_timestamp() erhält einen String (VARCHAR2, CHAR ...), wenn Sie versuchen, ihm ein Datum zu geben, dann konvertiert Oracle ihn in einen String gemäß NLS_DATE_FORMAT, der in verschiedenen Umgebungen variieren und unerwartete Ergebnisse zurückgeben kann (wie in diesem Fall). .
Was Sie tun sollten, ist zuerst to_char zu verwenden, damit Ihre Abfrage so aussehen kann:

select to_date(to_char((from_tz(to_timestamp(to_char(DATABASE_DATE, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York')
at time zone 'America/Los_Angeles'),'YYYY-MM-DD HH:MI:SS PM'),'YYYY-MM-DD HH:MI:SS PM') as localtime
from table

AKTUALISIERUNG: Wenn ich dich richtig verstehe, dann willst du so etwas:

select to_char((from_tz(to_timestamp(to_char(DATABASE_DATE, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York')
    at time zone 'America/Los_Angeles'),'YYYY-MM-DD HH:MI:SS PM TZD') as localtime
    from table