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 के दस्तावेज़ देखें।