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

conversión de fecha/hora entre diferentes zonas horarias

Primero, disolvamos tu expresión

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'

hace lo siguiente:

  1. TO_CHAR(q.created_date, 'DDMMYYYY:HH24:MI:SS') -> Convertir created_date valor a VARCHAR2
  2. TO_DATE(..., 'DDMMYYYY:HH24:MI:SS') -> Convertirlo de nuevo a una DATE
  3. CAST(... AS TIMESTAMP) -> Conviértalo en un TIMESTAMP (sin zona horaria)
  4. FROM_TZ(..., 'Europe/London') -> Adjunte la zona horaria 'Europa/Londres'
  5. ... AT TIME ZONE 'America/New_York' -> Convertir a la zona horaria 'América/Nueva_York'

¡Los puntos 1, 2 y 3 son inútiles! Desde created_date es un TIMESTAMP puedes hacerlo más corto

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

En caso de que su SESSIONTIMEZONE es Europe/London incluso puedes hacer

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