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