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

data/ora Conversione tra diversi fusi orari

Per prima cosa dissolviamo la tua espressione

FROM_TZ(CAST(TO_DATE(TO_CHAR(q.created_date, 'DDMMYYYY:HH24:MI:SS'), 'DDMMYYYY:HH24:MI:SS') AS TIMESTAMP), 'Europe/London') AT TIME ZONE 'America/New_York'

fa quanto segue:

  1. TO_CHAR(q.created_date, 'DDMMYYYY:HH24:MI:SS') -> Converti created_date valore a VARCHAR2
  2. TO_DATE(..., 'DDMMYYYY:HH24:MI:SS') -> Convertilo di nuovo in un DATE
  3. CAST(... AS TIMESTAMP) -> Convertilo in un TIMESTAMP (senza fuso orario)
  4. FROM_TZ(..., 'Europe/London') -> Allega il fuso orario "Europe/London"
  5. ... AT TIME ZONE 'America/New_York' -> Converti nel fuso orario 'America/New_York'

I punti 1,2 e 3 sono inutili! Dal created_date è un TIMESTAMP puoi farlo più breve

TO_CHAR(FROM_TZ(q.created_date, 'Europe/London') AT TIME ZONE 'America/New_York', 'DD-MON-YYYY HH24:MI:SS')

Nel caso in cui il tuo SESSIONTIMEZONE è Europe/London puoi anche fare

TO_CHAR(q.created_date AT TIME ZONE 'America/New_York', 'DD-MON-YYYY HH24:MI:SS')