MySQL में REPLACE() और GROUP_CONCAT() के साथ खाली मानों के लिए सेपरेटर बनाए रखना
GROUP_CONCAT() डिफ़ॉल्ट रूप से NULL मानों को छोड़ देता है, जिससे लगातार सेपरेटर बन जाते हैं। REPLACE() का उपयोग करके इसे ठीक किया जा सकता है।
व्यावहारिक उदाहरण
तालिका बनाना
mysql> CREATE TABLE DemoTable (
Id INT,
Number VARCHAR(100)
);
रिकॉर्ड डालना (खाली स्ट्रिंग सहित)
mysql> INSERT INTO DemoTable VALUES(10, '456'); mysql> INSERT INTO DemoTable VALUES(11, '345'); mysql> INSERT INTO DemoTable VALUES(10, ''); mysql> INSERT INTO DemoTable VALUES(10, '278'); mysql> INSERT INTO DemoTable VALUES(10, ''); mysql> INSERT INTO DemoTable VALUES(10, '789');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+------+--------+ | Id | Number | +------+--------+ | 10 | 456 | | 11 | 345 | | 10 | | | 10 | 278 | | 10 | | | 10 | 789 | +------+--------+
खाली फील्ड के लिए सेपरेटर बनाए रखने के लिए क्वेरी
mysql> SELECT Id, REPLACE(GROUP_CONCAT(Number), ',,', ',') FROM DemoTable GROUP BY Id;
आउटपुट:
+------+----------------------------------------+ | Id | REPLACE(GROUP_CONCAT(Number), ',,', ',') | +------+----------------------------------------+ | 10 | 456,278,789 | | 11 | 345 | +------+----------------------------------------+
समस्या और समाधान
समस्या: खाली स्ट्रिंग '' को GROUP_CONCAT शामिल करता है, जिससे 456,,278,,789 जैसा परिणाम मिलता है (दोहरे अल्पविराम)।
समाधान: REPLACE(..., ',,', ',') दोहरे अल्पविराम को एकल में बदलता है।
बेहतर दृष्टिकोण: NULL का उपयोग करें
-- कस्टम सेपरेटर GROUP_CONCAT(Number SEPARATOR ';') -- क्रमबद्ध करना GROUP_CONCAT(Number ORDER BY Number) -- अधिकतम लंबाई (डिफ़ॉल्ट 1024) GROUP_CONCAT(Number SEPARATOR ',' ORDER BY Number)