MySQL में, NULLIF()
एक प्रवाह नियंत्रण फ़ंक्शन है जो NULL
लौटाता है यदि इसके दोनों तर्क समकक्ष हैं। अन्यथा यह पहला तर्क देता है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
NULLIF(expr1,expr2)
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है:
SELECT NULLIF( 7, 7 );
परिणाम:
NULL
इस मामले में, दोनों तर्क समान हैं और इसलिए परिणाम NULL
. है ।
जब तर्क समतुल्य न हों
यहां बताया गया है कि जब तर्क समकक्ष नहीं होते हैं तो क्या होता है:
SELECT NULLIF( 7, 8 );
परिणाम:
7
तर्क अलग हैं और इसलिए पहला तर्क दिया जाता है।
स्ट्रिंग्स
यहां एक उदाहरण दिया गया है जो स्ट्रिंग की तुलना करता है:
SELECT
NULLIF( 'Bean', 'Bean' ) AS "Same",
NULLIF( 'Bean', 'Mushroom' ) AS "Different";
परिणाम:
Same Different ---- --------- NULL Bean
तिथियां
यहां एक उदाहरण दिया गया है जो तिथियों की तुलना करता है:
SELECT
NULLIF( DATE '2030-12-20', DATE '2030-12-20' ) AS "Same",
NULLIF( DATE '2030-12-20', DATE '2035-08-15' ) AS "Different";
परिणाम:
Same Different ---- ---------- NULL 2030-12-20
अभिव्यक्ति
NULLIF()
भावों के वर्तमान मूल्य का मूल्यांकन करता है। इसलिए, अगर हम इस तरह से एक व्यंजक पास करते हैं:
SELECT NULLIF( 8, 2 * 4 );
हमें यह मिलता है:
NULL
2 को 4 से गुणा करने पर 8 होता है, और इसलिए दोनों तर्क बराबर होते हैं।
यदि हम दूसरा तर्क बदलते हैं तो यहां क्या होता है:
SELECT NULLIF( 8, 2 * 3 );
परिणाम:
8
पहला तर्क वापस कर दिया गया है।
एक डेटाबेस उदाहरण
मान लीजिए कि हम निम्नलिखित क्वेरी चलाते हैं:
SELECT
Name,
LocalName
FROM country
WHERE Region = 'Southern Europe'
ORDER BY Name;
परिणाम:
+-------------------------------+--------------------------------+ | Name | LocalName | +-------------------------------+--------------------------------+ | Albania | Shqipëria | | Andorra | Andorra | | Bosnia and Herzegovina | Bosna i Hercegovina | | Croatia | Hrvatska | | Gibraltar | Gibraltar | | Greece | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | | Italy | Italia | | Macedonia | Makedonija | | Malta | Malta | | Portugal | Portugal | | San Marino | San Marino | | Slovenia | Slovenija | | Spain | España | | Yugoslavia | Jugoslavija | +-------------------------------+--------------------------------+
यहां, हमारे पास बाएं कॉलम में देश के नाम हैं, और संबंधित देश के लिए स्थानीय नाम दाईं ओर है।
आइए जोड़ें NULLIF()
हमारी क्वेरी के तीसरे कॉलम में:
SELECT
Name,
LocalName,
NULLIF(LocalName, Name) AS "Local Name if Different"
FROM country
WHERE Region = 'Southern Europe'
ORDER BY Name;
परिणाम:
+-------------------------------+--------------------------------+--------------------------------+ | Name | LocalName | Local Name if Different | +-------------------------------+--------------------------------+--------------------------------+ | Albania | Shqipëria | Shqipëria | | Andorra | Andorra | NULL | | Bosnia and Herzegovina | Bosna i Hercegovina | Bosna i Hercegovina | | Croatia | Hrvatska | Hrvatska | | Gibraltar | Gibraltar | NULL | | Greece | Elláda | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | Santa Sede/Città del Vaticano | | Italy | Italia | Italia | | Macedonia | Makedonija | Makedonija | | Malta | Malta | NULL | | Portugal | Portugal | NULL | | San Marino | San Marino | NULL | | Slovenia | Slovenija | Slovenija | | Spain | España | España | | Yugoslavia | Jugoslavija | Jugoslavija | +-------------------------------+--------------------------------+--------------------------------+
हम देख सकते हैं कि तीसरा कॉलम स्थानीय नाम तभी लौटाता है, जब वह Name
के मान से अलग हो कॉलम। अगर ऐसा ही है, तो NULL
लौटा दिया गया है।
हम NULLIF()
. का भी उपयोग कर सकते हैं हमारे क्वेरी परिणामों को फ़िल्टर करने के लिए:
SELECT
Name,
LocalName
FROM country
WHERE Region = 'Southern Europe'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;
परिणाम:
+-------------------------------+--------------------------------+ | Name | LocalName | +-------------------------------+--------------------------------+ | Albania | Shqipëria | | Bosnia and Herzegovina | Bosna i Hercegovina | | Croatia | Hrvatska | | Greece | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | | Italy | Italia | | Macedonia | Makedonija | | Slovenia | Slovenija | | Spain | España | | Yugoslavia | Jugoslavija | +-------------------------------+--------------------------------+
इस मामले में, हमने केवल उन पंक्तियों को लौटाया है जहां स्थानीय नाम Name
. से भिन्न है कॉलम।
NULLIF()
बनाम CASE
निम्नलिखित कोड:
NULLIF(expr1,expr2)
निम्नलिखित CASE
के बराबर है अभिव्यक्ति:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
गलत पैरामीटर गणना
तर्कों की गलत संख्या पास करने से त्रुटि होती है:
SELECT NULLIF( 5 );
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'