[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
. के लिए प्रारूप मॉडल स्वरूपित डेटा - यह आवश्यक रूप से कोई समस्या नहीं है क्योंकिMM
MON
. से भी मेल खाता है औरMONTH
लेकिन आपको शायद सही मॉडल का उपयोग करना चाहिए।