J'ai essayé de convertir un horodatage ("1985-02-07T00: 00: 00.000Z") en une date et j'ai échoué dans mes différentes tentatives.
Voici la requête que j'ai essayée:
select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ')
from dual;
Vos suggestions sont grandement appréciées.
to_date
convertit l'entrée en un type DATE
qui ne prend pas en charge les fractions de seconde. Pour utiliser des fractions de seconde, vous devez utiliser un type TIMESTAMP
qui est créé lors de l'utilisation de to_timestamp
commentaire de pst sur le ff3
le modificateur est également correct.
Les valeurs "constantes" dans le masque de format doivent être mises entre guillemets
Donc, la déclaration finale est:
select to_timestamp('1985-02-07T00:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"')
from dual;
SQL> select cast(to_timestamp('1985-02-07T00:00:00.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') as date)
2 from dual
3 /
CAST(TO_TIMESTAMP('
-------------------
07-02-1985 00:00:00
1 row selected.
Quelques règles à suivre :
MM
attend un numéro de mois, "MM"
Attend un double-M.FF
, pas F
ou FFF
. Vous spécifiez le nombre de chiffres avec un entier de fin, par exemple FF3
.FF3
Dans ce contexte.Cela marche:
SELECT TO_DATE('1985-02-07T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS')
FROM dual;
Je ne sais pas s'il existe un moyen d'ignorer les fractions de secondes dans TO_DATE()
j'ai donc utilisé des fonctions de manipulation de chaînes pour les supprimer:
SELECT TO_DATE(SUBSTR('1985-02-07T00:00:00.000Z', 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS')
FROM dual;
si vous voulez obtenir la chaîne au format datetime, essayez ceci ....
select to_char(TO_DATE('2012-06-26T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"'),'yyyy-MM-dd hh:mm:ss PM') as EVENT_DATE from dual
EVENT_DATE
-----------------------
2012-06-26 12:06:00 AM
seulement pour la date, utilisez simplement ...
select TO_DATE('2012-01-06T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"') from dual