to_timestamp () nhận một chuỗi (VARCHAR2, CHAR ...) nếu bạn cố gắng cung cấp cho nó một ngày, thì oracle sẽ chuyển đổi nó thành một chuỗi theo NLS_DATE_FORMAT có thể thay đổi trong các môi trường khác nhau và trả về kết quả không mong muốn (như trong trường hợp này) .
Điều bạn nên làm là sử dụng to_char trước, vì vậy truy vấn của bạn có thể trông giống như sau:
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
CẬP NHẬT: nếu tôi hiểu bạn đúng thì bạn muốn một cái gì đó như thế này:
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