to_timestamp() pobiera ciąg znaków (VARCHAR2, CHAR ...), jeśli spróbujesz podać datę, wtedy oracle przekonwertuje go na ciąg zgodnie z NLS_DATE_FORMAT, który może się różnić w różnych środowiskach i zwracać nieoczekiwane wyniki (jak w tym przypadku) .
Należy najpierw użyć to_char, aby zapytanie mogło wyglądać tak:
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
AKTUALIZACJA: jeśli dobrze rozumiem, to chcesz czegoś takiego:
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