Comment convertir "1985-02-07T00:00: 00.000 Z" (ISO8601) en valeur de date dans Oracle?
j'ai essayé de convertir un horodatage ("1985-02-07T00:00:00.000 Z") en une date et j'ai échoué dans mes différentes tentatives.
ci-Dessous est la requête que j'ai essayé:
select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ')
from dual;
Vos suggestions sont grandement appréciés.
5 réponses
to_date
convertit l'entrée d'une DATE
type qui ne supporte pas les secondes fractionnaires. Pour utiliser une fraction de seconde, vous devez utiliser un TIMESTAMP
type qui est créé en utilisant to_timestamp
commentaire de pst sur le ff3
le modificateur est aussi correct.
les valeurs" constantes " dans le masque de format doivent être incluses en double guillemet
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.
SELECT to_timestamp_tz('2012-08-08T09:06:14.000-07:00','YYYY-MM-DD"T"HH24:MI:SS.FF3TZR')
FROM dual;
External table DDL,
extract_date char(29) DATE_FORMAT timestamp WITH TIMEZONE mask 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZR'
- Littéraux doivent être entre guillemets:
MM
attend un nombre de mois,"MM"
attend un double-M. - le format de la fraction de seconde est
FF
, pasF
ouFFF
. Vous spécifiez le nombre de chiffres avec un entier traînant, par exempleFF3
. - mais les dates ne peuvent pas contenir de fraction de secondes de toute façon donc vous ne pouvez pas utiliser
FF3
dans ce contexte.
ce fonctionne:
SELECT TO_DATE('1985-02-07T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS')
FROM dual;
je ne sais pas si il y a une façon d'ignorer les fractions de secondes dans TO_DATE()
j'ai donc utilisé des fonctions de manipulation de chaîne pour les dépouiller:
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 alors 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 il suffit d'utiliser...
select TO_DATE('2012-01-06T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"') from dual