to_timestamp() får en streng (VARCHAR2, CHAR ...) hvis du forsøger at give den en dato, så vil Oracle konvertere den til en streng i henhold til NLS_DATE_FORMAT, som kan variere i forskellige miljøer og returnere uventede resultater (som i dette tilfælde) .
Det du skal gøre er at bruge to_char først, så din forespørgsel kan se sådan ud:
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
OPDATERING: hvis jeg forstår dig rigtigt, vil du gerne have noget som dette:
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