1.
To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
est à l'origine du problème. lorsque vous utilisez to_date sans le format d'heure, oracle utilisera le format NLS des sessions actuelles pour convertir, qui dans votre cas pourrait ne pas être "JJ/MM/AAAA". Vérifiez ceci...
SQL> select sysdate from dual;
SYSDATE
---------
26-SEP-12
Which means my session's setting is DD-Mon-YY
SQL> select to_char(sysdate,'MM/DD/YYYY') from dual;
TO_CHAR(SY
----------
09/26/2012
SQL> select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual;
select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual
*
ERROR at line 1:
ORA-01843: not a valid month
SQL> select to_date(to_char(sysdate,'MM/DD/YYYY'),'MM/DD/YYYY') from dual;
TO_DATE(T
---------
26-SEP-12
2.
Plus important encore, pourquoi convertissez-vous en char puis en date, au lieu de comparer directement
MaxDate = REP_DATE
Si vous souhaitez ignorer le composant de temps dans MaxDate avant la comparaison, vous devez utiliser..
trunc(MaxDate ) = rep_date
à la place.
==Mise à jour :basée sur la question mise à jour.
Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00
Je pense que le problème est plus complexe. si rep_time est destiné à n'être que du temps, vous ne pouvez pas le stocker dans la base de données en tant que date. Il faudrait que ce soit une chaîne ou un intervalle de date à heure ou numériquement en secondes (merci à Alex, voir ceci ). Si possible, je suggérerais d'utiliser une colonne rep_date contenant à la fois la date et l'heure et de la comparer directement à la colonne de date maximale.
S'il s'agit d'un système en cours d'exécution et que vous n'avez aucun contrôle sur repdate, vous pouvez essayer ceci.
trunc(rep_date) = trunc(maxdate) and
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')
Quoi qu'il en soit, l'heure est stockée de manière incorrecte (comme vous pouvez le constater à partir de l'année 1753) et il pourrait y avoir d'autres problèmes à l'avenir.