Oracle
 sql >> Database >  >> RDS >> Oracle

Converti TimeStamp in formato stringa TZ in TimeStamp in Oracle

Presumibilmente la T e la Z fisse ti confondono un po', in quanto non sono normali modello di formato data e ora elementi. Ma la documentazione dice:

Quindi racchiudi la T e la Z tra virgolette, come "T" e "Z" , nel tuo modello di formato.

Se non sei interessato al fuso orario puoi utilizzare il to_timestamp() funzione :

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

Oppure se vuoi avere con il fuso orario puoi usare il to_timestamp_tz() funzione , che per impostazione predefinita sarà il fuso orario della sessione corrente (poiché in realtà non ne stai specificando uno qui, la Z non viene interpretata come Zulu/UTC):

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

Se lo vuoi con un fuso orario e vuoi specificare che è UTC puoi forzarlo con il from_tz() funzione :

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

Per vedere la differenza che producono, specificando un fuso orario per la sessione come demo:

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                  

Suppongo che la Z sia fissa e che i valori che ottieni rappresentino sempre l'UTC; se effettivamente ottieni fusi orari diversi nei valori che devi convertire, dovrai estrarli e applicarli, il che è fattibile, ma difficile e non vale la pena approfondire a meno che tu non abbia effettivamente quella situazione.