यदि आपको पाठ के साथ SQL सर्वर त्रुटि Msg 8116 मिल रही है जिसमें लिखा है तर्क डेटा प्रकार दिनांक सबस्ट्रिंग फ़ंक्शन के तर्क 1 के लिए अमान्य है , ऐसा इसलिए है क्योंकि आप किसी फ़ंक्शन में गलत डेटा प्रकार पास कर रहे हैं - इस मामले में, SUBSTRING()
समारोह।
आप कई अन्य संदर्भों में भी वही त्रुटि (संदेश 8116) देख सकते हैं - यह SUBSTRING()
तक सीमित नहीं है समारोह।
त्रुटि का उदाहरण
यहां कोड का एक उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:
DECLARE @d date = '2020-03-04';
SELECT SUBSTRING(@d, 1, 4);
परिणाम:
Msg 8116, Level 16, State 1, Line 2 Argument data type date is invalid for argument 1 of substring function.
यहाँ, मैंने एक date
पारित किया है SUBSTRING()
. के पहले तर्क के रूप में टाइप करें , लेकिन इसकी अनुमति नहीं है।
SUBSTRING()
फ़ंक्शन किसी वर्ण, बाइनरी, टेक्स्ट, ntext, या छवि अभिव्यक्ति को इसके पहले तर्क के रूप में स्वीकार करता है। यदि आप कोई तर्क देते हैं जो उन स्वीकृत प्रकारों में से एक नहीं है, तो उपरोक्त त्रुटि होती है।
जैसा कि बताया गया है, यह अन्य कार्यों के साथ भी हो सकता है। किसी भी तरह से, इसका मतलब है कि आप गलत डेटा प्रकार को फ़ंक्शन में भेज रहे हैं।
समाधान 1
सबसे पहले, यदि आप एक कॉलम पास कर रहे हैं, तो जांच लें कि आपको सही कॉलम मिला है। समाधान गलत कॉलम नाम को सही कॉलम नाम से बदलने का एक साधारण मामला हो सकता है।
वही यदि आप एक चर पारित कर रहे हैं - जांचें कि यह सही चर है। आप गलत वेरिएबल को सही वेरिएबल से बदलकर इस समस्या को हल करने में सक्षम हो सकते हैं।
समाधान 2
यदि आप सुनिश्चित हैं कि आपके पास सही कॉलम नाम/चर है, तो इस त्रुटि को ठीक करने का एक तरीका तर्क को उपयुक्त डेटा प्रकार में बदलना है।
उदाहरण के लिए, हम उपरोक्त उदाहरण को निम्नलिखित में समायोजित कर सकते हैं:
DECLARE @d date = '2020-03-04';
SELECT SUBSTRING(CAST(@d AS varchar(10)), 1, 4);
परिणाम:
2020
समाधान 3
लेकिन इससे पहले कि हम कुछ भी परिवर्तित करें, कभी-कभी यह पीछे हटने और यह सोचने के लिए भुगतान करता है कि वांछित परिणाम उत्पन्न करने का कोई आसान तरीका है या नहीं।
उदाहरण के लिए, उपरोक्त उदाहरण में, हम केवल तारीख से वर्ष निकालने का प्रयास कर रहे हैं। इस मामले में, बेहतर होगा कि हम SUBSTRING()
. को हटा दें YEAR()
. के पक्ष में पूरी तरह से कार्य करें समारोह:
DECLARE @d date = '2020-03-04';
SELECT YEAR(@d);
परिणाम:
2020
इसे करने का दूसरा तरीका FORMAT()
. का उपयोग करना होगा समारोह:
DECLARE @d date = '2020-03-04';
SELECT FORMAT(@d, 'yyyy');
परिणाम:
2020