अधिकांश प्रमुख RDBMS COALESCE()
. का समर्थन करते हैं ऑपरेटर, जो अपने तर्कों की सूची से पहला गैर-शून्य मान देता है।
COALESCE()
एक SQL-मानक विशेषता है (यह ISO/IEC 9075 विनिर्देश में शामिल है)।
सिंटैक्स
वाक्य रचना इस प्रकार है:
COALESCE (V1, V2, ..., Vn)
इसलिए, कम से कम एक तर्क की आवश्यकता है, लेकिन कई तर्क दिए जा सकते हैं (और आमतौर पर हैं)।
COALESCE()
एक n . माना जाता है -एडिक ऑपरेटर। दूसरे शब्दों में, यह एक ऑपरेटर है जिसमें ऑपरेंड की एक चर संख्या होती है (यानी n ऑपरेंड)।
उदाहरण
प्रदर्शित करने के लिए यहां एक सरल उदाहरण दिया गया है:
SELECT COALESCE(null, 'Papaya', 'Salad');
परिणाम:
Papaya
ऐसे में Papaya
पहला गैर-शून्य मान था, और इसलिए COALESCE()
वह मान लौटा दिया।
Salad
एक गैर-शून्य मान भी था, लेकिन यह Papaya
. के बाद आया और इसलिए इसे वापस नहीं किया गया।
COALESCE()
बनाम CASE
COALESCE()
आमतौर पर CASE
. के लिए एक वाक्यात्मक शॉर्टकट माना जाता है अभिव्यक्ति।
इस प्रकार, निम्नलिखित कथन:
COALESCE (V1, V2)
के बराबर है:
CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END
और निम्नलिखित कथन:
COALESCE (V1, V2, ..., Vn)
(एन 3 के लिए) के बराबर है:
CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, ..., Vn) END
जब सभी मान शून्य हों
यदि सभी मान null
हैं , COALESCE()
रिटर्न null
:
SELECT COALESCE( null, null );
परिणाम:
null
आपके आरडीबीएमएस के आधार पर, शून्य मानों के लिए वास्तविक आउटपुट भिन्न हो सकता है। उदाहरण के लिए, जब psql (PostgreSQL के लिए) का उपयोग किया जाता है, तो खाली स्ट्रिंग डिफ़ॉल्ट रूप से आउटपुट होती है जब भी एक शून्य मान लौटाया जाता है (हालाँकि इसे बदला जा सकता है)। SQLite के साथ भी ऐसा ही है (और इसे बदला भी जा सकता है)।
SQL सर्वर में, यदि सभी तर्क null
हैं , तो कम से कम एक शून्य मान टाइप किया हुआ null
. होना चाहिए . इसलिए, उपरोक्त उदाहरण वास्तव में एक त्रुटि का परिणाम है (क्योंकि सभी शून्य तर्क null
हैं स्थिरांक)।
अभिव्यक्ति
COALESCE()
पहले एक्सप्रेशन का वर्तमान मान लौटाता है जो प्रारंभ में null
. पर मूल्यांकन नहीं करता है . इसलिए, अगर हम इस तरह से एक व्यंजक पास करते हैं:
SELECT COALESCE( null, 3 * 5 );
हमें यह मिलता है:
15
डेटाबेस उदाहरण
मान लीजिए कि हम निम्नलिखित क्वेरी चलाते हैं:
SELECT
name,
salary
FROM employee;
और हमें निम्नलिखित परिणाम मिलते हैं:
name | salary -------+-------- Elise | 100000 Rohit | 50000 Homer | null
हम देख सकते हैं कि DOB
. में अंतिम पंक्ति का शून्य मान है कॉलम।
यदि हम शून्य मान को किसी अन्य मान से बदलना चाहते हैं, तो हम COALESCE()
. का उपयोग कर सकते हैं इस प्रकार है:
SELECT
name,
COALESCE(salary, 0) AS salary
FROM employee;
परिणाम:
name | salary -------+-------- Elise | 100000 Rohit | 50000 Homer | 0
इस मामले में हमने सभी शून्य मानों को पूर्णांक 0
. से बदल दिया है ।
आरडीबीएमएस के बीच अंतर
सामान्य तौर पर, COALESCE()
आरडीबीएमएस में काफी समान काम करता है।
लेकिन कुछ अंतर हैं।
डेटा प्रकार
हम MySQL, MariaDB और SQLite में निम्न कार्य कर सकते हैं:
SELECT
name,
COALESCE(salary, 'None') AS salary
FROM employee;
परिणाम:
name salary ----- ------ Elise 100000 Rohit 50000 Homer None
ऐसे में जब भी salary
कॉलम में एक शून्य मान होता है, आउटपुट None
है ।
लेकिन वह क्वेरी SQL सर्वर, PostgreSQL, या Oracle डेटाबेस में समस्याएँ पैदा कर सकती है।
जब मैं SQL सर्वर, PostgreSQL, और Oracle डेटाबेस में उस क्वेरी को चलाता हूं, तो मुझे गलत डेटा प्रकार के विकल्प मान के कारण त्रुटि मिलती है।
जब मैं उपरोक्त क्वेरी चलाता हूं तो SQL सर्वर क्या लौटाता है:
Msg 245, Level 16, State 1, Line 15 Conversion failed when converting the varchar value 'None' to data type int.
यहां बताया गया है कि PostgreSQL क्या लौटाता है:
ERROR: invalid input syntax for type integer: "None" LINE 3: COALESCE(salary, 'None') AS salary ^
और यहाँ Oracle डेटाबेस क्या लौटाता है:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
लेकिन अगर मैं संख्यात्मक मान का उपयोग करता हूं, तो मुझे त्रुटि नहीं मिलती:
SELECT
name,
COALESCE(salary, 0) AS salary
FROM employee;
परिणाम:
name | salary -------+-------- Elise | 100000 Rohit | 50000 Homer | 0
तो यह अंतिम उदाहरण उपरोक्त सभी छह RDBMS में काम करता है।
अशक्त तर्क
RDBMS कैसे प्रोसेस करते हैं COALESCE()
. के बीच एक और अंतर यह है कि वे अशक्त तर्कों से कैसे निपटते हैं।
जैसा कि उल्लेख किया गया है, SQL सर्वर में, यदि सभी तर्क null
हैं , तो कम से कम एक शून्य मान टाइप किया हुआ होना चाहिए null
. दूसरे शब्दों में, यदि COALESCE()
. के सभी तर्क शून्य स्थिरांक हैं, तो हमें एक त्रुटि मिलती है। यह अन्य RDBMS के मामले में नहीं है, जहां सभी तर्क शून्य स्थिरांक हो सकते हैं, और आउटपुट null
होगा त्रुटि के बजाय।