to_timestamp()は文字列(VARCHAR2、CHAR ...)を取得します。日付を指定しようとすると、OracleはNLS_DATE_FORMATに従って文字列に変換します。これは環境によって異なり、予期しない結果を返す可能性があります(この場合のように) 。
最初にto_charを使用する必要があるため、クエリは次のようになります。
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
更新: 私があなたを正しく理解しているなら、あなたはこのようなものが欲しいでしょう:
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