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

Convierta TimeStamp en formato de cadena TZ a TimeStamp en Oracle

Presumiblemente, las T y Z fijas lo confunden un poco, ya que no son normales modelo de formato de fecha y hora elementos. Pero la documentación dice:

Así que encierra la T y la Z entre comillas dobles, como "T" y "Z" , en su modelo de formato.

Si no está interesado en la zona horaria, puede usar la to_timestamp() función :

to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')

O si quieres tener con la zona horaria puedes usar la to_timestamp_tz() función , que por defecto será la zona horaria de su sesión actual (ya que en realidad no está especificando una aquí, la Z no se interpreta como Zulu/UTC):

to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')

Si lo desea con una zona horaria y desea especificar que es UTC, puede forzarlo con el from_tz() función :

from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')), 'UTC')

Para ver la diferencia que producen, especificando una zona horaria para la sesión como demostración:

alter session set time_zone = 'America/New_York';

select to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') as no_tz,
  to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') as default_tz,
  from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"'), 'UTC') as utc_tz
from dual;

NO_TZ
--------------------------------------------------
DEFAULT_TZ
--------------------------------------------------
UTC_TZ
--------------------------------------------------
24-MAR-15 07.08.24.000000000                       
24-MAR-15 07.08.24.000000000 AMERICA/NEW_YORK      
24-MAR-15 07.08.24.000000000 UTC                  

Supongo que la Z es fija y, por lo tanto, los valores que obtiene siempre representan UTC; si realmente obtiene diferentes zonas horarias en los valores que necesita convertir, entonces deberá extraerlos y aplicarlos, lo cual es factible, pero difícil, y no vale la pena entrar a menos que realmente tenga esa situación.