Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में कस्टम फ़ंक्शन से कॉमा-सूची स्ट्रिंग का योग निकालें

MySQL में कॉमा-अलग संख्याओं वाले स्ट्रिंग का योग निकालने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है। एक कस्टम स्टोर्ड फ़ंक्शन बनाकर यह कार्य कर सकते हैं।

कस्टम फ़ंक्शन बनाएं

mysql> DELIMITER $$
mysql> CREATE FUNCTION totalSumInCommaSeparatedString(input VARCHAR(50))
    -> RETURNS INT
    -> DETERMINISTIC
    -> NO SQL
    -> BEGIN
    ->     DECLARE totalSum INT DEFAULT 0;
    ->     WHILE INSTR(input, ',') > 0 DO
    ->         SET totalSum = totalSum + SUBSTRING_INDEX(input, ',', 1);
    ->         SET input = MID(input, INSTR(input, ',') + 1);
    ->     END WHILE;
    ->     RETURN totalSum + input;
    -> END $$
mysql> DELIMITER ;

उपयोग उदाहरण

1. टेबल बनाएं

mysql> CREATE TABLE DemoTable (
    -> ListOfValues VARCHAR(50)
    -> );

2. डेटा डालें

mysql> INSERT INTO DemoTable VALUES('20,10,40,50,60');

3. फ़ंक्शन कॉल करें

mysql> SELECT totalSumInCommaSeparatedString(ListOfValues) AS TotalSum
    -> FROM DemoTable;

4. परिणाम

+----------+
| TotalSum |
+----------+
| 180      |
+----------+

फ़ंक्शन विश्लेषण

  • INSTR(input, ',') - कॉमा की स्थिति ढूंढता है
  • SUBSTRING_INDEX(input, ',', 1) - पहली संख्या निकालता है
  • MID(input, pos + 1) - शेष स्ट्रिंग लेता है
  • लूप तब तक चलता है जब तक कॉमा नहीं मिलते
  • अंतिम संख्या (बिना कॉमा) अंत में जोड़ी जाती है

सीमाएं

  • केवल पूर्णांक के लिए काम करता है (दशमलव काट दिए जाते हैं)
  • खाली स्ट्रिंग या अमान्य डेटा पर त्रुटि दे सकता है
  • बड़े स्ट्रिंग के लिए धीमा (लूप-आधारित)
  • ऋणात्मक संख्याएं संभालता है

बेहतर विकल्प (MySQL 8.0+)

-- रिकर्सिव CTE के साथ
WITH RECURSIVE split AS (
    SELECT 
        CAST(SUBSTRING_INDEX(ListOfValues, ',', 1) AS UNSIGNED) AS val,
        SUBSTRING(ListOfValues, LENGTH(SUBSTRING_INDEX(ListOfValues, ',', 1)) + 2) AS rest
    FROM DemoTable
    UNION ALL
    SELECT 
        CAST(SUBSTRING_INDEX(rest, ',', 1) AS UNSIGNED),
        SUBSTRING(rest, LENGTH(SUBSTRING_INDEX(rest, ',', 1)) + 2)
    FROM split
    WHERE rest != ''
)
SELECT SUM(val) FROM split;

सिफारिश

उत्पादन में, डेटा को सामान्यीकृत टेबल में संग्रहीत करें (एक पंक्ति प्रति मान)।

  1. - MySQL में SELECT और SHOW कमांड के परिणामों को कैसे संयोजित करें

    समाधान उपयोगकर्ता-परिभाषित वेरिएबल (@) या सिस्टम वेरिएबल (@@) का उपयोग करके एक ही SELECT में कई मान दिखाएं। उपयोगकर्ता वेरिएबल SELECT @first_name AS EmployeeFirstName, @last_name AS EmployeeLastName; +-------------------+------------------+ | EmployeeFirstName | EmployeeLastName | +---------------

  1. - C# में स्ट्रिंग की लिस्ट से कॉमा-सेपरेटेड स्ट्रिंग कैसे बनाएं?

    स्ट्रिंग की एक लिस्ट को बिल्ट-इन string.Join एक्सटेंशन मेथड का उपयोग करके कॉमा-सेपरेटेड स्ट्रिंग में परिवर्तित किया जा सकता है। string.Join(,, list); इस प्रकार का रूपांतरण वास्तव में उपयोगी होता है जब हम यूज़र से डेटा की एक लिस्ट एकत्र करते हैं (उदाहरण: चेकबॉक्स चयनित डेटा) और इसे कॉमा-सेपरेटेड स्

  1. - पायथन में स्ट्रिंग को नंबरों के साथ कैसे जोड़ें?

    स्ट्रिंग को नंबर के साथ जोड़ने के लिए, आपको str(number) का उपयोग करके नंबर को स्ट्रिंग में कास्ट करना होगा। उदाहरण के लिए, >>> a = string >>> b = 1 >>> print(a + str(b)) string1 पायथन 2 में, आप नंबर को बैकटिक (`) से घेरकर भी वही परिणाम प्राप्त कर सकते हैं। ध्यान दें कि बैक