यदि आपको SQL सर्वर त्रुटि संदेश 241 मिल रहा है जिसमें लिखा है वर्ण स्ट्रिंग से दिनांक और/या समय परिवर्तित करते समय रूपांतरण विफल , ऐसा शायद इसलिए है क्योंकि आप किसी स्ट्रिंग को दिनांक/समय मान में बदलने का प्रयास कर रहे हैं, लेकिन उस विशेष स्ट्रिंग को दिनांक/समय मान में परिवर्तित नहीं किया जा सकता है।
त्रुटि का उदाहरण
यहां कोड का एक उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:
SELECT CAST('Tomorrow' AS date);
परिणाम:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
यहां, हमने स्ट्रिंग को Tomorrow
में बदलने का प्रयास किया है date
. तक टाइप करें, लेकिन Tomorrow
एक मान्य तिथि नहीं है जिसे date
. में बदला जा सकता है टाइप करें।
SQL सर्वर स्ट्रिंग को date
में नहीं बदल सकता और इसलिए इसने एक त्रुटि लौटा दी।
समाधान 1
इसे ठीक करने का सबसे स्पष्ट तरीका यह है कि स्ट्रिंग को वास्तविक तिथि के समान बदल दिया जाए।
यदि आप एक कॉलम पास कर रहे हैं, तो जांचें कि आपको सही कॉलम मिला है। वही अगर आप एक वेरिएबल पास कर रहे हैं - जांचें कि यह सही वेरिएबल है।
उदाहरण के लिए, निम्न रूपांतरण सफल होता है:
SELECT CAST('20 Feb 2030' AS date);
परिणाम:
2030-02-20
इनपुट तिथि के प्रारूप के आधार पर, आप CONVERT()
. का उपयोग करना बेहतर समझ सकते हैं फ़ंक्शन, ताकि आप इनपुट दिनांक अभिव्यक्ति का प्रारूप निर्दिष्ट कर सकें।
उदाहरण:
SELECT
CONVERT(date, '03/02/2030', 101) AS 'US with century',
CONVERT(date, '03/02/30', 1) AS 'US without century',
CONVERT(date, '03/02/2030', 103) AS 'British with century',
CONVERT(date, '03/02/30', 3) AS 'US without century';
परिणाम:
+-------------------+----------------------+------------------------+----------------------+ | US with century | US without century | British with century | US without century | |-------------------+----------------------+------------------------+----------------------| | 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 | +-------------------+----------------------+------------------------+----------------------+
समाधान 2
त्रुटि से निपटने का दूसरा तरीका TRY_CAST()
. का उपयोग करना है या TRY_CONVERT()
. ये फ़ंक्शन NULL
लौटाते हैं त्रुटि के बजाय।
उदाहरण:
SELECT TRY_CAST('Tomorrow' AS date);
परिणाम:
NULL
यह अनिवार्य रूप से अंतर्निहित मुद्दे को संबोधित नहीं करता है, यह केवल इसे छुपाता है। रूपांतरण अभी भी नहीं हो सका।
किसी भी मामले में, आपकी आवश्यकताओं के आधार पर यह अभी भी एक व्यवहार्य विकल्प हो सकता है।
समाधान 3
त्रुटि से निपटने का दूसरा तरीका स्ट्रिंग को किसी भिन्न डेटा प्रकार में बदलना है। जाहिर है, अगर आप date
. के साथ समाप्त करना चाहते हैं तो यह अच्छा नहीं है टाइप करें, लेकिन शायद त्रुटि इसलिए हुई क्योंकि आपने गलती से date
specified निर्दिष्ट कर दी थी दूसरे प्रकार के बजाय टाइप करें।
उदाहरण:
SELECT CAST('Wednesday' AS char(3));
परिणाम:
Wed