2011-03-09 5 views
0

Quand je fais cela dans l'oracle 10g:oracle fonction to_date ne pas accepter le format

select to_date(trunc(SOMEINPUTdATE)) from table1 
where to_date(trunc(date_column_timestamp),'MM/DD/YYYY') 
    >= to_date('03/11/2011' ,'MM/DD/YYYY') 

je reçois: ORA-01843: not a valid month si je change à: 'YYYY/MM/DD', cela fonctionne. Mais 'MM/DD/YYYY' est un format valide non?

Répondre

7

Vous vous trompez un peu. TO_DATE convertit une chaîne en DATE. Si date_column_timestamp est déjà une date, vous n'avez pas besoin de le convertir en date.

select trunc(SOMEINPUTdATE) from table1 
where trunc(date_column_timestamp) 
    >= to_date('03/11/2011' ,'MM/DD/YYYY') 

Le ORA-01843 est causé par la conversion implicite d'une date à chaîne. En d'autres termes, ce qui suit:

to_date(trunc(date_column_timestamp),'MM/DD/YYYY') 

est équivalent à (en supposant que le format de date par défaut DD-MON-YYYY):

to_date(TO_CHAR(trunc(date_column_timestamp),'DD-MON-YYYY'),'MM/DD/YYYY') 

Ainsi, le TO_CHAR retours quelque chose comme '11-MAR-2011', ce qui provoque alors to_date à l'échec parce que la les formats de date ne correspondent pas.

Le même problème existe dans votre clause select. Vous n'avez pas besoin de to_date autour d'une colonne trunc.

Questions connexes