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

MySQL में ज़ीरो से डिवाइडिंग से कैसे बचें

समस्या:

आप भाग-दर-शून्य त्रुटि से बचना चाहते हैं।

उदाहरण:

हमारे डेटाबेस में 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 . वाली पंक्तियां शून्य के बराबर परिणाम सेट से गायब हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL डीबी में कॉलम नामों में हाइफ़न

  2. DROP डेटाबेस अनुमतियों के बिना कमांड-लाइन से सभी MySQL तालिकाओं को कैसे निकालें?

  3. Laravel में एकाधिक डेटाबेस का उपयोग कैसे करें

  4. एसक्यूएल:2 अलग auto_increment के साथ एक संबंध तालिका बनाना

  5. MySQL कई मानों की तरह