1.
To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
समस्या पैदा कर रहा है। जब आप समय प्रारूप के बिना to_date का उपयोग करते हैं, तो ऑरैकल कन्वर्ट करने के लिए वर्तमान सत्र एनएलएस प्रारूप का उपयोग करेगा, जो आपके मामले में "डीडी/एमएम/वाई वाई वाई वाई" नहीं हो सकता है। इसे जांचें...
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.
इससे भी महत्वपूर्ण बात यह है कि आप सीधे तुलना करने के बजाय चार और फिर आज तक क्यों परिवर्तित हो रहे हैं
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 का उपयोग करने का सुझाव दूंगा जिसमें दिनांक और समय दोनों हों और इसकी तुलना सीधे अधिकतम दिनांक कॉलम से करें।
यदि यह एक रनिंग सिस्टम है और आपका रिपडेट पर कोई नियंत्रण नहीं है, तो आप इसे आजमा सकते हैं।
trunc(rep_date) = trunc(maxdate) and
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')
किसी भी तरह से, समय गलत तरीके से संग्रहीत किया जा रहा है (जैसा कि आप वर्ष 1753 से बता सकते हैं) और आगे अन्य मुद्दे भी हो सकते हैं।