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

SQL सर्वर COALESCE () समझाया गया

SQL सर्वर में, COALESCE() अभिव्यक्ति अपना पहला गैर-शून्य तर्क देता है।

जिस तरह से यह काम करता है, हम अभिव्यक्ति के लिए तर्कों की एक सूची पास करते हैं, यह क्रम में तर्कों का मूल्यांकन करता है और पहली अभिव्यक्ति का वर्तमान मान देता है जो प्रारंभ में NULL का मूल्यांकन नहीं करता है ।

सिंटैक्स

वाक्य रचना इस प्रकार है:

COALESCE ( expression [ ,...n ] )

उदाहरण

प्रदर्शित करने के लिए यहां एक सरल उदाहरण दिया गया है:

SELECT COALESCE(null, 'Cat', 'Dog');

परिणाम:

Cat

इस मामले में, Cat पहला गैर-नल तर्क था, और इसलिए COALESCE() वह मान लौटा दिया।

अभिव्यक्ति

जैसा कि बताया गया है, COALESCE() वर्तमान मान देता है पहली अभिव्यक्ति का जो प्रारंभ में NULL . का मूल्यांकन नहीं करता है . इसलिए, अगर हम इस तरह से एक व्यंजक पास करते हैं:

SELECT COALESCE( null, 2 * 3 );

हमें यह मिलता है:

6

फ़ंक्शन उच्चतम डेटा प्रकार प्राथमिकता के साथ अभिव्यक्ति का डेटा प्रकार देता है। यदि सभी भाव अशक्त हैं, तो परिणाम अशक्त के रूप में टाइप किया जाता है।

जब सभी तर्क शून्य हों

यदि सभी तर्क NULL हैं , COALESCE() रिटर्न NULL . हालांकि, कम से कम एक शून्य मान टाइप किया हुआ NULL . होना चाहिए , अन्यथा कोई त्रुटि उत्पन्न होती है।

दूसरे शब्दों में, वे सभी NULL नहीं हो सकते हैं स्थिर:

SELECT COALESCE( null, null );

हमें यह मिलता है:

Msg 4127, Level 16, State 1, Line 1
At least one of the arguments to COALESCE must be an expression that is not the NULL constant.

इस मामले में, सभी तर्क NULL . थे स्थिर, और इसलिए एक त्रुटि लौटा दी गई।

नीचे एक परिदृश्य प्रदर्शित करने के लिए एक डेटाबेस उदाहरण दिया गया है जहां COALESCE() रिटर्न NULL जब सभी तर्क NULL हों ।

मान लीजिए कि हम निम्नलिखित क्वेरी चलाते हैं:

SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

परिणाम:

CustomerId  CustomerCategoryId
----------- ------------------
NULL        NULL

दोनों कॉलम में NULL है मान।

तो अगर हम दोनों कॉलम COALESCE() . पर पास करते हैं , हमें NULL . का परिणाम मिलता है :

SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

परिणाम:

NULL

यदि हम किसी एक कॉलम को NULL . से बदलते हैं तो भी यही बात लागू होती है स्थिर:

SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

परिणाम:

NULL

तो यह तभी है जब सब तर्क हैं NULL निरंतर कि हमें एक त्रुटि मिलती है।

NULL बदलें ज्ञात मान वाले परिणाम

हम किसी ज्ञात मान को उस ज्ञात मान के साथ किसी भी NULL परिणाम को बदलने के लिए अंतिम तर्क के रूप में शामिल कर सकते हैं।

उदाहरण के लिए, निम्न क्वेरी NULL लौटाती है :

SELECT SUM( UnitPrice ) 
FROM Sales.SpecialDeals;

परिणाम:

NULL

इस मामले में, UnitPrice कॉलम में सभी पंक्तियों में NULL मान होते हैं, और इसलिए परिणाम NULL था .

हम COALESCE() . का उपयोग कर सकते हैं इस तरह:

SELECT COALESCE( SUM( UnitPrice ), 0 )
FROM Sales.SpecialDeals;

परिणाम:

0.00

अब, NULL परिणाम को एक ज्ञात मान (शून्य) से बदल दिया गया है।

COALESCE() बनाम CASE

COALESCE() अभिव्यक्ति वास्तव में CASE . के लिए एक वाक्यात्मक शॉर्टकट है अभिव्यक्ति। जब हम COALESCE() . का उपयोग करते हैं एक्सप्रेशन, क्वेरी ऑप्टिमाइज़र इसे CASE . के रूप में फिर से लिखता है अभिव्यक्ति।

जब मैं निम्नलिखित कथन चलाता हूं:

SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

क्वेरी ऑप्टिमाइज़र इसे निम्नलिखित में फिर से लिखता है:

CASE 
WHEN [WideWorldImporters].[Sales].[SpecialDeals].[CustomerID] IS NOT NULL THEN [WideWorldImporters].[Sales].[SpecialDeals].[CustomerID] 
ELSE [WideWorldImporters].[Sales].[SpecialDeals].[CustomerCategoryID] 
END

COALESCE() बनाम ISNULL()

कुछ मायनों में, COALESCE() अभिव्यक्ति समान है ISNULL() समारोह। लेकिन मतभेद हैं। विशेष रूप से:

  • ISNULL() एक फ़ंक्शन है और इसका मूल्यांकन केवल एक बार किया जाता है। COALESCE() दूसरी ओर, एक अभिव्यक्ति है, और संभावित रूप से कई बार मूल्यांकन किया जा सकता है।
  • परिणामी अभिव्यक्ति का डेटा प्रकार निर्धारण अलग है। ISNULL पहले पैरामीटर के डेटा प्रकार का उपयोग करता है, COALESCE CASE का अनुसरण करता है अभिव्यक्ति नियम और उच्चतम प्राथमिकता के साथ डेटा प्रकार का मान लौटाता है।
  • परिणाम अभिव्यक्ति की शून्यता ISNULL के लिए अलग है और COALESCE . ISNULL वापसी मूल्य को हमेशा शून्य नहीं माना जाता है (माना जाता है कि वापसी मूल्य एक गैर-शून्य है)। इसके विपरीत,COALESCE गैर-शून्य पैरामीटर के साथ NULL माना जाता है ।
  • ISNULL के लिए मान्यताएं और COALESCE भी अलग हैं। उदाहरण के लिए, एक NULL ISNULL . के लिए मान int . में कनवर्ट किया जाता है हालांकि COALESCE . के लिए , आपको एक डेटा प्रकार प्रदान करना होगा।
  • ISNULL केवल दो पैरामीटर लेता है। इसके विपरीत COALESCE पैरामीटर की एक चर संख्या लेता है।

अधिक जानकारी

अधिक विवरण और अधिक जटिल उदाहरणों के लिए Microsoft के दस्तावेज़ देखें।


  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 DDL और लॉगऑन ट्रिगर

  2. SQL सर्वर (T-SQL उदाहरण) में 'datetime2' को 'datetime' में बदलें

  3. SQL सर्वर 2019 में ट्रिगर इवेंट प्रकारों की श्रेणीबद्ध सूची

  4. सादे एडीओ का उपयोग कर SQL सर्वर से दृश्य परिभाषा पुनर्प्राप्त करने का कोई तरीका है?

  5. SQL सर्वर लेनदेन संबंधी प्रतिकृति आंतरिक