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

MySQL में कॉमा-सेपरेटेड फील्ड में मानों की संख्या कैसे गिनें?

MySQL में कॉमा-सेपरेटेड स्ट्रिंग में मानों की संख्या गिनने के लिए CHAR_LENGTH() और REPLACE() का उपयोग करके कॉमा की संख्या गिनें और 1 जोड़ें।

सिंटैक्स

SELECT *, 
       (CHAR_LENGTH(yourColumnName) - CHAR_LENGTH(REPLACE(yourColumnName, ',', '')) + 1) AS total_values
FROM yourTableName;

तर्क समझें

  • CHAR_LENGTH(col) - मूल स्ट्रिंग की लंबाई
  • CHAR_LENGTH(REPLACE(col, ',', '')) - कॉमा हटाने के बाद की लंबाई
  • अंतर = कॉमा की संख्या
  • + 1 = मानों की संख्या (n कॉमा = n+1 मान)

उदाहरण के साथ समझें

टेबल बनाएं:

CREATE TABLE CountValuesCommaSeparated (
    Id INT NOT NULL AUTO_INCREMENT,
    CommaSeparatedValue TEXT,
    PRIMARY KEY(Id)
);

विभिन्न लंबाई के कॉमा-सेपरेटेड मान डालें:

INSERT INTO CountValuesCommaSeparated(CommaSeparatedValue) VALUES('101,104,1900,46675,7895');
INSERT INTO CountValuesCommaSeparated(CommaSeparatedValue) VALUES('1010,18949,37465');
INSERT INTO CountValuesCommaSeparated(CommaSeparatedValue) VALUES('2010,1201,2743874,7485');
INSERT INTO CountValuesCommaSeparated(CommaSeparatedValue) VALUES('4757,457587,48586,378575,3874765,487565');

सभी रिकॉर्ड देखें:

SELECT * FROM CountValuesCommaSeparated;

आउटपुट:

+----+-----------------------------------------+
| Id | CommaSeparatedValue                     |
+----+-----------------------------------------+
| 1  | 101,104,1900,46675,7895                 |
| 2  | 1010,18949,37465                        |
| 3  | 2010,1201,2743874,7485                  |
| 4  | 4757,457587,48586,378575,3874765,487565 |
+----+-----------------------------------------+

मान गिनने का क्वेरी

SELECT *, 
       (CHAR_LENGTH(CommaSeparatedValue) - CHAR_LENGTH(REPLACE(CommaSeparatedValue, ',', '')) + 1) AS TotalValue
FROM CountValuesCommaSeparated;

परिणाम:

+----+-----------------------------------------+------------+
| Id | CommaSeparatedValue                     | TotalValue |
+----+-----------------------------------------+------------+
| 1  | 101,104,1900,46675,7895                 | 5          |
| 2  | 1010,18949,37465                        | 3          |
| 3  | 2010,1201,2743874,7485                  | 4          |
<| 4  | 4757,457587,48586,378575,3874765,487565 | 6          |
+----+-----------------------------------------+------------+

व्याख्या प्रति पंक्ति

मानकॉमागणनाकुल
101,104,1900,46675,789544+15
1010,18949,3746522+13
2010,1201,2743874,748533+14
4757,457587,48586,378575,3874765,48756555+16

एज केस हैंडलिंग

खाली स्ट्रिंग या NULL के लिए

SELECT *,
       CASE 
           WHEN CommaSeparatedValue IS NULL OR CommaSeparatedValue = '' THEN 0
           ELSE CHAR_LENGTH(CommaSeparatedValue) - CHAR_LENGTH(REPLACE(CommaSeparatedValue, ',', '')) + 1
       END AS TotalValue
FROM CountValuesCommaSeparated;

नोट

  • यह तरीका डेटा में कॉमा होने पर गलत गिनती देगा (जैसे "1,000,000")
  • बेहतर डिज़ाइन: अलग टेबल में नॉर्मलाइज़्ड स्टोरेज उपयोग करें
  • MySQL 8.0+ में JSON_TABLE() या REGEXP_COUNT() (8.0.4+) उपयोग कर सकते हैं
  1. - MySQL में फ़ील्ड मान से कॉमा की गिनती करना

    LENGTH और REPLACE से वर्ण गिनती किसी वर्ण (जैसे कॉमा) की घटनाएँ गिनने के लिए: कुल लंबाई - उस वर्ण को हटाने के बाद की लंबाई। सिंटैक्स SELECT LENGTH(col) - LENGTH(REPLACE(col, ,, )) AS comma_count FROM table; तालिका और डेटा INSERT INTO DemoTable1510 VALUES(20,35), (45,67,89), (90,97,101,190); कॉ

  1. - MySQL में REPLACE() और UPDATE से कॉलम के आंशिक डेटा हटाएं

    MySQL में UPDATE और REPLACE() फ़ंक्शन का उपयोग करके कॉलम मान के विशिष्ट भाग को हटा या बदल सकते हैं। सिंटैक्स UPDATE टेबल_नाम SET कॉलम_नाम = REPLACE(कॉलम_नाम, खोज_स्ट्रिंग, प्रतिस्थापन_स्ट्रिंग); उदाहरण: XML-जैसे टैग हटाएं 1. टेबल बनाएं CREATE TABLE DemoTable1583 (GameDetails TEXT); 2. डेटा डाले

  1. - MySQL में ENUM कॉलम से केवल 'NO' मानों की गणना करें

    MySQL में ENUM कॉलम पर सशर्त गणना के लिए बूलियन अभिव्यक्ति का योग (SUM(condition)) उपयोग कर सकते हैं। MySQL में TRUE = 1 और FALSE = 0 होता है। टेबल बनाएं mysql> CREATE TABLE DemoTable1829 ( Name VARCHAR(20), isTopper ENUM(YES,NO) ); डेटा डालें mysql> INSERT INTO DemoTable1829 VALUES(