Oracle
 sql >> Database >  >> RDS >> Oracle

Conversione dei fusi orari Oracle (usando from_tz)

to_timestamp() ottiene una stringa (VARCHAR2, CHAR ...) se provi a dargli una data, Oracle la convertirà in una stringa secondo NLS_DATE_FORMAT che potrebbe variare in ambienti diversi e restituire risultati imprevisti (come in questo caso) .
Quello che dovresti fare è utilizzare prima to_char, quindi la tua query può assomigliare a questa:

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

AGGIORNAMENTO: se ti capisco bene allora vuoi qualcosa del genere:

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