Home >Database >Mysql Tutorial >How to Split Comma-Separated Values in a MySQL Column into Separate Rows?
Mysql String Split
Problem:
You have a table with a column containing comma-separated values. You want to split these values into separate rows, with each value corresponding to a row.
For example, given the table:
Col1 | col2 |
---|---|
1 | a,b,c |
2 | d,e |
You would like to extract the following rows:
Col1 | col2 |
---|---|
1 | a |
1 | b |
1 | c |
2 | d |
2 | e |
Solution:
This can be achieved using a MySQL stored procedure. The following SQL script includes both the stored procedure and the function it uses:
DELIMITER $$ CREATE FUNCTION strSplit(x VARCHAR(65000), delim VARCHAR(12), pos INTEGER) RETURNS VARCHAR(65000) BEGIN DECLARE output VARCHAR(65000); SET output = REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos) , LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1) , delim , ''); IF output = '' THEN SET output = null; END IF; RETURN output; END $$ CREATE PROCEDURE BadTableToGoodTable() BEGIN DECLARE i INTEGER; SET i = 1; REPEAT INSERT INTO GoodTable (col1, col2) SELECT col1, strSplit(col2, ',', i) FROM BadTable WHERE strSplit(col2, ',', i) IS NOT NULL; SET i = i + 1; UNTIL ROW_COUNT() = 0 END REPEAT; END $$ DELIMITER ;
To use this stored procedure, you can run the following query:
CALL BadTableToGoodTable();
This will create a new table called 'GoodTable' with the desired data.
The above is the detailed content of How to Split Comma-Separated Values in a MySQL Column into Separate Rows?. For more information, please follow other related articles on the PHP Chinese website!