web-dev-qa-db-fra.com

Utilisation de la fonction to_date d'Oracle pour la chaîne de date en millisecondes

Je dois effectuer des insertions dans une base de données Oracle. J'ai quelques dates .__ dans le format suivant

'23.12.2011 13:01:001'

Après la documentation, j'ai écrit les insertions to_date comme suit:

to_date('23.12.2011 13:01:01', 'DD.MM.YYYY HH24:MI:SS')

qui fonctionne correctement. Maintenant, j'ai des dates avec millisecondes avec le format

'23.12.2011 13:01:001'

J'ai essayé ce qui suit:

to_date('23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3')

ce qui est incorrect (génère une erreur 01821. 00000 - "format de date non reconnu").

Quelle "chaîne" dois-je utiliser pour ce format en millisecondes?

Merci d'avance!

39
Luixv

Oracle DATE ne stocke pas les temps avec plus de précision qu'une seconde. Vous ne pouvez pas stocker de données de précision milliseconde dans une colonne DATE.

Vos deux options consistent à tronquer la chaîne des millisecondes avant de la convertir en DATE, c.-à-d. 

to_date( substr('23.12.2011 13:01:001', 1, 19), 'DD.MM.YYYY HH24:MI:SS' )

ou pour convertir la chaîne en une TIMESTAMP prenant en charge la précision à la milliseconde

to_timestamp( '23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3' )
68
Justin Cave

TO_DATE prend en charge la conversion en type de données DATE, qui ne prend pas en charge les millisecondes. Si vous souhaitez une prise en charge milliseconde dans Oracle, consultez le type de données TIMESTAMP et la fonction TO_TIMESTAMP.

J'espère que cela pourra aider.

9
Mark J. Bobak

Vous pouvez essayer ce format SS.FF pendant millisecondes:

yyyy-mm-dd HH:MI:SS.FF

Pour plus de détails:
https://docs.Oracle.com/cd/B19306_01/server.102/b14200/functions193.htm

5
dipti

Pour trois chiffres millisecondes:

TO_CHAR(LN_AUTOD_UWRG_DTTM,'MM/DD/YYYY HH24:MI:SS.FF3')

Pour six chiffres millisecondes:

TO_CHAR(LN_AUTOD_UWRG_DTTM,'MM/DD/YYYY HH24:MI:SS.FF'),
1
SANKAR