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

date/heure Conversion entre différents fuseaux horaires

Dissolvons d'abord votre expression

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'

fait ce qui suit :

  1. TO_CHAR(q.created_date, 'DDMMYYYY:HH24:MI:SS') -> Convertir created_date valeur à VARCHAR2
  2. TO_DATE(..., 'DDMMYYYY:HH24:MI:SS') -> Reconvertissez-le en DATE
  3. CAST(... AS TIMESTAMP) -> Convertissez-le en un TIMESTAMP (sans fuseau horaire)
  4. FROM_TZ(..., 'Europe/London') -> Attachez-lui le fuseau horaire 'Europe/Londres'
  5. ... AT TIME ZONE 'America/New_York' -> Convertir en fuseau horaire 'America/New_York'

Les points 1,2 et 3 sont inutiles ! Depuis created_date est un TIMESTAMP vous pouvez le faire plus court

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

Si votre SESSIONTIMEZONE est Europe/London vous pouvez même faire

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