Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में Msg 8116 "तर्क डेटा प्रकार दिनांक सबस्ट्रिंग फ़ंक्शन के तर्क 1 के लिए अमान्य है" को ठीक करें

यदि आपको पाठ के साथ 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर लॉग शिपिंग और डिजास्टर रिकवरी इंस्टाल और कॉन्फ़िगरेशन -3

  2. शीर्ष X संपादित करने के लिए मान कैसे बदलें और SQL सर्वर प्रबंधन स्टूडियो (SSMS) में शीर्ष X पंक्तियों का चयन करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 20

  3. SQL सर्वर अंत में खाली जगह को स्वचालित रूप से अनदेखा क्यों करता है?

  4. टीएसक्यूएल में बढ़ती तिथियों का परिणाम उत्पन्न करें

  5. निकाय ढांचे का उपयोग करके प्राथमिक कुंजी मान अपडेट करें