从逗号分隔值中提取 MySQL 字符串
在 MySQL 中,经常需要从包含多个值的字符串中提取单个值用逗号分隔。这带来了挑战,因为 MySQL 本身并不提供字符串分割功能。
为了解决这个问题,我们可以利用存储过程来迭代提取值。操作方法如下:
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 ;
示例数据:
Col1 | Col2 |
---|---|
1 | a,b,c |
2 | d,e |
结果:
Col1 | Col2 |
---|---|
1 | a |
1 | b |
1 | c |
2 | d |
2 | e |
用法:
要使用此解决方案,使用原始数据创建一个名为 BadTable 的表,并创建一个名为 GoodTable 的新表来存储提取的值。然后,执行以下命令:
CALL BadTableToGoodTable(); SELECT * FROM GoodTable;
以上是如何从 MySQL 中的逗号分隔字符串中提取值?的详细内容。更多信息请关注PHP中文网其他相关文章!