Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Converter TimeStamp no formato de string TZ para TimeStamp no Oracle


Presumivelmente, os T e Z fixos estão confundindo você um pouco, pois não são normais modelo de formato de data e hora elementos. Mas a documentação diz:

Então você coloca T e Z entre aspas duplas, como "T" e "Z" , em seu modelo de formato.

Se você não estiver interessado no fuso horário, poderá usar o to_timestamp() função :
to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')

Ou se você quiser ter com o fuso horário você pode usar o to_timestamp_tz() função , que será padronizado para o fuso horário da sua sessão atual (como você não está realmente especificando um aqui, o Z não é interpretado como Zulu/UTC):
to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')

Se você quiser com um fuso horário e quiser especificar que é UTC, você pode forçar isso com o from_tz() função :
from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')), 'UTC')

Para ver a diferença que eles produzem, especificando um fuso horário para a sessão como uma demonstração:
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                  

Estou assumindo que o Z é fixo e os valores que você obtém são, portanto, sempre representam UTC; se você realmente obtiver fusos horários diferentes nos valores que precisa converter, precisará extraí-los e aplicá-los - o que é factível, mas difícil, e não vale a pena entrar, a menos que você realmente tenha essa situação.