स्टोर्ड प्रोसीजर में लूप और SUBSTRING_INDEX का उपयोग करें
कॉमा-विभाजित स्ट्रिंग को विभाजित करने और प्रत्येक मान को एक टेबल में डालने के लिए, स्टोर्ड प्रोसीजर में LOOP, SUBSTRING_INDEX, और INSERT का उपयोग करें। REPLACE() की आवश्यकता नहीं है।
स्टोर्ड प्रोसीजर बनाना
mysql> DELIMITER //
mysql> CREATE PROCEDURE SP_SplitString(Value LONGTEXT)
BEGIN
DECLARE front TEXT DEFAULT NULL;
DECLARE frontlen INT DEFAULT NULL;
DECLARE TempValue TEXT DEFAULT NULL;
iterator: LOOP
IF LENGTH(TRIM(Value)) = 0 OR Value IS NULL THEN
LEAVE iterator;
END IF;
SET front = SUBSTRING_INDEX(Value, ',', 1);
SET frontlen = LENGTH(front);
SET TempValue = TRIM(front);
INSERT INTO store (allValues) VALUES (TempValue);
SET Value = INSERT(Value, 1, frontlen + 1, '');
END LOOP;
END //
mysql> DELIMITER ;
स्टोरेज टेबल बनाना
mysql> CREATE TABLE store (
Id INT NOT NULL AUTO_INCREMENT,
allValues VARCHAR(30),
PRIMARY KEY(Id)
);
प्रोसीजर कॉल करना
mysql> CALL SP_SplitString('Hi,Hello,Good Morning,Bye');
परिणाम: विभाजित मान टेबल में डाले गए
mysql> SELECT * FROM store;
+----+--------------+ | Id | allValues | +----+--------------+ | 1 | Hi | | 2 | Hello | | 3 | Good Morning | | 4 | Bye | +----+--------------+
एल्गोरिदम व्याख्या
SUBSTRING_INDEX(Value, ',', 1)— पहली कॉमा से पहले का भाग निकालता है।LENGTH(front)— निकाले गए भाग की लंबाई।TRIM(front)— अतिरिक्त स्पेस हटाता है।INSERT(Value, 1, frontlen + 1, '')— मूल स्ट्रिंग से पहले भाग और कॉमा को हटा देता है।- लूप तब तक चलता है जब तक स्ट्रिंग खाली या NULL न हो जाए।
नोट
- यह दृष्टिकोण सरल कॉमा-विभाजित स्ट्रिंग्स के लिए काम करता है।
- जटिल पार्सिंग (उद्धृत स्ट्रिंग्स, एस्केप किए गए विभाजक) के लिए, एप्लिकेशन लेयर में प्रोसेस करना बेहतर है।
- MySQL 8.0+ में
JSON_TABLE()या रिकर्सिव CTE का उपयोग अधिक शक्तिशाली विकल्प हैं।