[TL;DR] बस उपयोग करें:TO_CHAR( tbl.col, 'IW' )
आपके पास कई समस्याएं हैं:
-
आप कॉल कर रहे हैं
TO_DATE( string, format_model )एकDATE. के साथ (VARCHAR2नहीं) ) जो Oracle कोDATE. का एक अंतर्निहित रूपांतरण करने का कारण बनता है एकVARCHAR2. के लिएNLS_DATE_FORMATका उपयोग करके सत्र पैरामीटर प्रारूप मॉडल के रूप में बस इतना है कि आप इसे वापसDATEमें बदल सकते हैं . तो, आप प्रभावी ढंग से कर रहे हैं:TO_CHAR( TO_DATE( TO_CHAR( tbl.col, ( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' ) ), 'YYYY/MM/DD' ), 'IW' )ऐसा न करें , बस उपयोग करें:
TO_CHAR( tbl.col, 'IW' )यदि आप ऐसा करते हैं तो निम्नलिखित मुद्दे अप्रासंगिक हैं।
- जैसा कि RealCheeseLord बताता है, आपके प्रारूप मॉडल में वर्ष और दिन की स्थिति उलट जाती है; और
-
आप
YYYY. का उपयोग कर रहे हैं वर्ष प्रारूप मॉडल के लिए इसलिए सभी वर्ष पहली शताब्दी ईस्वी में होने जा रहे हैं।उदाहरण :
SELECT TO_CHAR( TO_DATE( '19-Jun-17', 'YYYY/MM/DD' ), 'YYYY-MM-DD' ) AS dt FROM DUALआउटपुट :
DT ---------- 0019-06-17यदि आप निहित स्ट्रिंग रूपांतरण को ठीक नहीं करने जा रहे हैं तो आप शायद या तो चाहेंगे:
TO_CHAR(TO_DATE(tbl.col,'DD-MON-YY'),'IW') AS weekया (इस पर निर्भर करता है कि आप वर्ष 99 को 1999 या 2099 चाहते हैं):
TO_CHAR(TO_DATE(tbl.col,'DD-MON-RR'),'IW') AS week -
आप
MM. का उपयोग कर रहे हैंMON. के लिए प्रारूप मॉडल स्वरूपित डेटा - यह आवश्यक रूप से कोई समस्या नहीं है क्योंकिMMMON. से भी मेल खाता है औरMONTHलेकिन आपको शायद सही मॉडल का उपयोग करना चाहिए।