Oracle
 sql >> Base de données >  >> RDS >> Oracle

Convertir TimeStamp au format de chaîne TZ en TimeStamp dans Oracle

Vraisemblablement, les T et Z fixes vous déroutent un peu, car ils ne sont pas normaux modèle de format date/heure éléments. Mais la documentation dit :

Vous placez donc le T et le Z entre guillemets doubles, comme "T" et "Z" , dans votre modèle de format.

Si vous n'êtes pas intéressé par le fuseau horaire, vous pouvez utiliser le to_timestamp() fonction :

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

Ou si vous voulez avoir avec le fuseau horaire, vous pouvez utiliser le to_timestamp_tz() fonction , qui utilisera par défaut le fuseau horaire de votre session actuelle (comme vous n'en spécifiez pas un ici, le Z n'est pas interprété comme Zulu/UTC) :

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

Si vous le voulez avec un fuseau horaire et que vous voulez spécifier qu'il est UTC, vous pouvez le forcer avec le from_tz() fonction :

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

Pour voir la différence que cela produit, spécifiez un fuseau horaire pour la session en tant que démo :

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                  

Je suppose que le Z est fixe et que les valeurs que vous obtenez sont donc toujours représentatives de l'UTC ; si vous obtenez réellement différents fuseaux horaires dans les valeurs que vous devez convertir, vous devrez les extraire et les appliquer - ce qui est faisable, mais difficile, et ne vaut pas la peine d'être abordé à moins que vous ne soyez réellement dans cette situation.