COL1 में डेटा dd-mon-yy में है
नहीं यह नहीं। एक DATE
कॉलम नहीं करता है कोई प्रारूप हो। जब आप इसे प्रदर्शित करते हैं तो यह केवल आपके SQL क्लाइंट द्वारा उस प्रतिनिधित्व में परिवर्तित (निहित रूप से) होता है।
यदि COL1 वास्तव में एक DATE
है to_date()
. का उपयोग कर कॉलम पर यह बेकार है क्योंकि to_date()
एक स्ट्रिंग को DATE में कनवर्ट करता है।
आपको केवल to_char() चाहिए, और कुछ नहीं:
SELECT TO_CHAR(col1, 'mm/dd/yyyy')
FROM TABLE1
आपके मामले में क्या होता है कि to_date()
. पर कॉल करना DATE
. को रूपांतरित करता है एक वर्ण मान में (डिफ़ॉल्ट एनएलएस प्रारूप लागू करना) और फिर उसे वापस एक DATE में परिवर्तित करना। इस दोहरे अंतर्निहित रूपांतरण के कारण रास्ते में कुछ जानकारी खो जाती है।
संपादित करें
तो आपने एक चरित्र कॉलम में DATE को स्टोर करने के लिए वह बड़ी गलती की है। और इसलिए आपको अभी समस्याएँ आती हैं।
सबसे अच्छा (और ईमानदार होना:केवल समझदार) समाधान उस कॉलम को DATE
. में बदलना है . फिर आप निहित डेटा प्रकार रूपांतरण के बारे में चिंता किए बिना मूल्यों को किसी भी प्रतिनिधित्व में परिवर्तित कर सकते हैं।
लेकिन शायद इसका उत्तर है "मुझे यह मॉडल विरासत में मिला है, मुझे इसका सामना करना है " (यह हमेशा होता है, जाहिरा तौर पर गलत डेटाटाइप चुनने के लिए कोई भी जिम्मेदार नहीं है), तो आपको RR
का उपयोग करने की आवश्यकता है YY
. के बजाय :
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1
चाल चलनी चाहिए। ध्यान दें कि मैंने mon
. भी बदल दिया है से mm
जैसा कि आपका उदाहरण है 27-11-89
जिसमें महीने के लिए एक संख्या है, न कि "शब्द" (जैसे NOV )
अधिक विवरण के लिए मैनुअल देखें:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215