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.

27
demandé sur Abilash 2011-12-28 13:53:04

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;
43
répondu a_horse_with_no_name 2011-12-28 10:19:31
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.
9
répondu Rob van Wijk 2016-09-08 10:09:28
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'
3
répondu Charlie 木匠 2012-08-17 16:12:06

règles à suivre:

  1. Littéraux doivent être entre guillemets: MM attend un nombre de mois,"MM" attend un double-M.
  2. le format de la fraction de seconde est FF, pas F ou FFF. Vous spécifiez le nombre de chiffres avec un entier traînant, par exemple FF3.
  3. 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;
2
répondu Álvaro González 2011-12-28 10:22:35

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
0
répondu user4524067 2018-02-14 08:58:38