आप दोनों संस्करणों में अनेक निहित दिनांक रूपांतरण कर रहे हैं। यह:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
के बराबर है:
DUAL सेSELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
जबकि दूसरी क्वेरी में उनमें से एक को एक विशिष्ट प्रारूप के साथ बदल दिया गया है। यह आपके डिफ़ॉल्ट प्रारूप की तरह दिखता है - जिसे आप सीधे रजिस्ट्री को संशोधित किए बिना टॉड वरीयताओं में सेट कर सकते हैं; यह स्पष्ट नहीं है कि आप टॉड से संबंधित कुछ भी संशोधित कर रहे हैं - DD-MON-RR
है , जैसा कि इन प्रश्नों में प्लग इन करके दिखाया गया है:
SELECT to_date(to_char(to_date('01-FEB-1949','DD-MON-RR'),
'DD-MON-RR'),'DD-MON-RR') AS date1,
to_date(to_char(to_date('01-FEB-1949','DD-MON-RR'),
'dd-MON-yyyy'),'DD-MON-RR') AS date2 FROM DUAL;
DATE1 DATE2
February, 01 2049 00:00:00+0000 February, 01 1949 00:00:00+0000
(SQL Fiddle )
आप इस SQL Fiddle
में देख सकते हैं कि पहले संस्करण में, दिनांक 49
. के रूप में वर्ष के साथ एक स्ट्रिंग के रूप में दिखाई देता है के बजाय 1949
, और फिर उसकी व्याख्या की जाती है - RR
. द्वारा मास्क - 2049
. के रूप में , जो अपेक्षित व्यवहार है।
लघु संस्करण:निहित तिथि रूपांतरणों या एनएलएस तिथि प्रारूप मास्क पर कभी भी भरोसा न करें।