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

टी-एसक्यूएल ISNULL() स्ट्रिंग को छोटा क्यों कर रहा है और COALESCE नहीं है?

Microsoft के अनुसार दस्तावेज़ीकरण , समारोह के लिए:

ISNULL(check_expression, replacement_value)

replacement_value एक प्रकार का होना चाहिए जो परोक्ष रूप से check_expression . के प्रकार में परिवर्तनीय हो . ध्यान दें कि 'xy'+NULL . के लिए टाइप करें है VARCHAR(3) . इस वजह से आपकी स्ट्रिंग 'ABCDEFGHIJ' VARCHAR(3) . पर डाला जाता है और इस प्रकार छंटनी की।

यह अजीब लगता है कि यह VARCHAR(2) क्यों नहीं है? , लेकिन यह तरीका है - 'xy' . से एक वर्ण लंबा . आप इसके साथ खेल सकते हैं SQLFiddle और अपने लिए देखें कि 'xy'+NULL . के लिए वह टाइप करें अभिव्यक्ति के लिए समान है CASE WHEN 1=2 THEN 'XYZ' ELSE NULL END , जो NULL . है लेकिन परोक्ष रूप से VARCHAR(3) . के अनुकूल है ।

ऐसा लगता है कि अभिव्यक्ति के लिए 'xy'+NULL अनुमानित लंबाई की गणना 'xy' . के रूप में की जा सकती है प्रत्येक NULL . के लिए स्ट्रिंग की लंबाई (2) प्लस 1 जोड़ा गया। उदाहरण के लिए, टाइप करें 'xy'+NULL+NULL है VARCHAR(4) , के लिए टाइप करें 'xy'+NULL+NULL+NULL है VARCHAR(5) और इसी तरह - इसे देखें SQLFiddle . यह बेहद अजीब है, लेकिन MS SQL Server 2008 और 2012 इसी तरह काम करते हैं।



  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 सर्वर और प्रकारों का अंतर्निहित रूपांतरण

  2. SQL सर्वर में लोअरकेस को अपरकेस में कैसे बदलें - UPPER ()

  3. SQL क्वेरी में गतिशील रूप से कॉलम चुनें

  4. SQL सर्वर में LIKE लॉजिकल ऑपरेटर क्या है - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 123

  5. SQL सर्वर में डेटा कैसे डालें