Oracle
 sql >> Base de données >  >> RDS >> Oracle

Conversion des fuseaux horaires Oracle (à l'aide de from_tz)

to_timestamp() obtient une chaîne (VARCHAR2, CHAR ...) si vous essayez de lui donner une date, alors oracle la convertira en une chaîne selon NLS_DATE_FORMAT qui peut varier selon les environnements et renvoyer des résultats inattendus (comme dans ce cas) .
Ce que vous devez faire est d'abord d'utiliser to_char pour que votre requête ressemble à ceci :

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

MISE À JOUR : si je vous comprends bien, vous voulez quelque chose comme ça :

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