首页 >数据库 >mysql教程 >如何将 MySQL 列中的逗号分隔值拆分为单独的行?

如何将 MySQL 列中的逗号分隔值拆分为单独的行?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-28 07:32:11728浏览

How to Split Comma-Separated Values in a MySQL Column into Separate Rows?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn