तिथियों का कोई प्रारूप नहीं होता - वे आंतरिक रूप से 7- या 8- बाइट्स द्वारा प्रदर्शित होते हैं। . यह केवल तभी होता है जब किसी क्लाइंट प्रोग्राम को एक तारीख पास की जाती है कि क्लाइंट प्रोग्राम (संभावित रूप से) उसे एक प्रारूप देता है।
SQL/Plus या SQL डेवलपर में तिथियों के लिए डिफ़ॉल्ट स्ट्रिंग प्रारूप NLS_DATE_FORMAT
द्वारा निर्धारित किया जाता है सत्र पैरामीटर। अन्य क्लाइंट के पास आमतौर पर ऐसे पैरामीटर होंगे जिन्हें आप डिफ़ॉल्ट दिनांक स्वरूप के लिए सेट कर सकते हैं (यदि वे NLS
का भी उपयोग नहीं करते हैं) समायोजन)। हालांकि, सावधान रहें कि NLS_DATE_FORMAT
एक सत्र पैरामीटर है इसलिए यह उपयोगकर्ता के सत्र से संबंधित है और एकाधिक उपयोगकर्ताओं के पास पैरामीटर के लिए अलग-अलग मान हो सकते हैं कि उन्होंने इसे कैसे सेट किया है।
यदि आप किसी तिथि को एक विशिष्ट प्रारूप देना चाहते हैं तो आपको इसे एक स्ट्रिंग में बदलना होगा:
SELECT TO_CHAR( DATE '2016-05-01', 'MM/DD/YYYY HH24:MI:SS' )
FROM DUAL;
आपकी क्वेरी काम क्यों नहीं करती :
TO_DATE( value, frmt )
एक स्ट्रिंग मान और प्रारूप मास्क की अपेक्षा करता है। आंतरिक TO_DATE('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
पूरी तरह से मान्य है और DATE '2016-05-01'
लौटाएगा ।
हालांकि, बाहरी TO_DATE()
उसके बाद DATE
पारित किया जा रहा है टाइप करें जिसे आपने अभी जेनरेट किया है और स्ट्रिंग प्रारूप (दो तारों की बजाय यह अपेक्षा कर रहा है)। Oracle परोक्ष रूप से TO_CHAR()
को कॉल करेगा दिनांक पर और NLS_DATE_FORMAT
का उपयोग करें प्रारूप मास्क के रूप में सत्र पैरामीटर। यह दिनांक से एक स्ट्रिंग उत्पन्न कर रहा है और, त्रुटि को देखते हुए, NLS_DATE_FORMAT
का मान है MM/DD/YYYY HH24:MI:SS
. नहीं है इसलिए जब बाहरी TO_DATE()
अंतर्निहित रूप से बनाई गई स्ट्रिंग को पार्स करने का प्रयास करता है, यह विफल हो जाता है क्योंकि इसे पढ़ने वाला पहला नंबर एक महीने के लिए अमान्य है।