1.
To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
причинява проблема. когато използвате to_date без формата за време, oracle ще използва NLS формата на текущите сесии за преобразуване, който във вашия случай може да не е "ДД/ММ/ГГГГ". Проверете това...
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.
По-важното е защо преобразувате в char и след това към днешна дата, вместо да сравнявате директно
MaxDate = REP_DATE
Ако искате да игнорирате времевия компонент в MaxDate преди сравнение, трябва да използвате..
trunc(MaxDate ) = rep_date
вместо това.
==Актуализация:въз основа на актуализиран въпрос.
Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00
Мисля, че проблемът е по-сложен. ако rep_time е предвидено да бъде само време, тогава не можете да го съхранявате в базата данни като дата. Трябва да бъде низ или дата към интервал от време или цифрово като секунди (благодарение на Алекс, вижте това ) . Ако е възможно, предлагам да използвате една колона rep_date, която съдържа и дата, и час, и да я сравнявате директно с колоната за максимална дата.
Ако това е работеща система и нямате контрол върху repdate, можете да опитате това.
trunc(rep_date) = trunc(maxdate) and
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')
И в двата случая времето се съхранява неправилно (както можете да разберете от годината 1753) и може да има други проблеми в бъдеще.