sql >> Base de Datos >  >> RDS >> Oracle

Conversión de zonas horarias de Oracle (usando from_tz)

to_timestamp() obtiene una cadena (VARCHAR2, CHAR ...) si intenta darle una fecha, Oracle la convertirá en una cadena de acuerdo con NLS_DATE_FORMAT que puede variar en diferentes entornos y arrojar resultados inesperados (como en este caso) .
Lo que debe hacer es usar to_char primero, para que su consulta se vea así:

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

ACTUALIZACIÓN: si te entiendo bien, entonces quieres algo como esto:

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