Primeiro vamos dissolver sua expressão
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'
faz o seguinte:
TO_CHAR(q.created_date, 'DDMMYYYY:HH24:MI:SS')
-> Convertercreated_date
valor paraVARCHAR2
TO_DATE(..., 'DDMMYYYY:HH24:MI:SS')
-> Converta de volta para umDATE
CAST(... AS TIMESTAMP)
-> Converta para umTIMESTAMP
(sem fuso horário)FROM_TZ(..., 'Europe/London')
-> Anexar o fuso horário 'Europe/London' a ele... AT TIME ZONE 'America/New_York'
-> Converter para o fuso horário 'América/Nova_York'
Os pontos 1,2 e 3 são inúteis! Desde
created_date
é um TIMESTAMP
você pode fazê-lo mais curto TO_CHAR(FROM_TZ(q.created_date, 'Europe/London') AT TIME ZONE 'America/New_York', 'DD-MON-YYYY HH24:MI:SS')
Caso seu
SESSIONTIMEZONE
é Europe/London
você pode até fazer TO_CHAR(q.created_date AT TIME ZONE 'America/New_York', 'DD-MON-YYYY HH24:MI:SS')