'10-MAY-20'
एक तारीख नहीं है, यह एक स्ट्रिंग है। किसी दिनांक का कोई प्रारूप नहीं होता, आपकी स्थानीय-विशिष्ट NLS सेटिंग के आधार पर इसे TO_CHAR
का उपयोग करके मानव पठनीय प्रारूप में प्रदर्शित किया जाता है और उचित प्रारूप मुखौटा।
साथ ही, आपको दो अंकों के YY
. का उपयोग करने से बचना चाहिए वर्ष के लिए प्रतिनिधित्व, यह संपूर्ण कारण है Y2K बग शुरू हो गया। हमेशा YYYY
. का उपयोग करें प्रारूप।
स्ट्रिंग को दिनांक में बदलने के लिए:
TO_DATE
का उपयोग करें और उपयुक्त प्रारूप मुखौटा:
where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
या, ANSI date literal
use का उपयोग करें जो निश्चित प्रारूप का उपयोग करता है 'YYYY-MM-DD'
:
where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
एक और बात, DATE
एक Oracle आरक्षित शब्द है, आप दस्तावेज . शायद, आप उद्धृत पहचानकर्ता . का उपयोग कर रहे हैं "date"
यानी आरक्षित शब्द के चारों ओर दोहरे उद्धरण चिह्नों का उपयोग करना।
ऐसा शायद इसलिए है क्योंकि SQL डेवलपर की आपकी NLS सेटिंग 'DD-MON-YY'
पर सेट है , इसलिए जब आप उस प्रारूप में तिथि पास करते हैं तो यह तिथि के लिए एक अंतर्निहित रूपांतरण करता है। हालांकि, अगर आप प्रारूप बदलते हैं तो यह काम नहीं करेगा:
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';