Mysql 字符串拆分
问题:
您有一个表,其中的列包含逗号- 分隔值。您希望将这些值拆分为单独的行,每个值对应一行。
例如,给定表:
Col1 | col2 |
---|---|
1 | a,b,c |
2 | d,e |
您希望提取以下行:
Col1 | col2 |
---|---|
1 | a |
1 | b |
1 | c |
2 | d |
2 | e |
解决方案:
这可以使用 MySQL 存储来实现 程序。以下 SQL 脚本包含存储过程及其使用的函数:
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 ;
要使用此存储过程,您可以运行以下查询:
CALL BadTableToGoodTable();
这将创建一个名为“GoodTable”的新表,其中包含所需的数据。
以上是如何将 MySQL 列中的逗号分隔值拆分为单独的行?的详细内容。更多信息请关注PHP中文网其他相关文章!