समस्या:
आप भाग-दर-शून्य त्रुटि से बचना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में numbers
कॉलम में डेटा के साथ id
, number_a
, और number_b
।
आईडी | <थ>नंबर_ए <थ>नंबर_बी||
---|---|---|
1 | 4 | 0 |
2 | 57 | -5 |
3 | -7 | 56 |
4 | -67 | 0 |
5 | 23 | 55 |
6 | -8 | -4 |
आइए number_a
को विभाजित करें द्वारा number_b
और तालिका को एक नए कॉलम के साथ दिखाएं, divided
, विभाजन के परिणाम के साथ।
समाधान 1:
SELECT *, number_a / NULLIF(number_b, 0) AS divided FROM numbers;
समाधान 2:
SELECT *, CASE WHEN number_b = 0 THEN NULL ELSE number_a / number_b END AS divided FROM numbers;
नतीजा यह है:
आईडी | <थ>नंबर_ए <थ>नंबर_बी <थ>विभाजित|||
---|---|---|---|
1 | 4 | 0 | शून्य |
2 | 57 | -5 | -11.4000 |
3 | -7 | 56 | -0.1250 |
4 | -67 | 0 | शून्य |
5 | 23 | 55 | 0.4182 |
6 | -8 | -4 | 2.0000 |
समाधान 3:
SELECT *, number_a / number_b AS divided FROM numbers WHERE number_b != 0;
नतीजा यह है:
आईडी | <थ>नंबर_ए <थ>नंबर_बी <थ>विभाजित|||
---|---|---|---|
2 | 57 | -5 | -11.4000 |
3 | -7 | 56 | -0.1250 |
5 | 23 | 55 | 0.4182 |
6 | -8 | -4 | 2.0000 |
चर्चा:
पहला समाधान NULLIF()
. का उपयोग करता है फ़ंक्शन, जो दो संख्याओं को तर्क के रूप में लेता है। जब पहला तर्क दूसरे तर्क के बराबर होता है, तो फ़ंक्शन NULL
लौटाता है नतीजतन। अगर number_b
शून्य के बराबर है, भाजक है NULL
, और विभाजन का परिणाम NULL
. है ।
दूसरा समाधान CASE
. का उपयोग करता है बयान। यदि WHEN
. के बाद की स्थिति कीवर्ड सत्य है (हमारे मामले में, शर्त number_b = 0
. है ), हम निर्दिष्ट करते हैं कि NULL लौटाया जाए। अन्यथा, विभाजन हमेशा की तरह होता है।
तीसरा समाधान केवल WHERE
. का उपयोग करता है उन पंक्तियों को फ़िल्टर करने की शर्त जहां number_b
शून्य है। number_b
. वाली पंक्तियां शून्य के बराबर परिणाम सेट से गायब हैं।