【问题标题】:Mysql string split [duplicate]Mysql字符串拆分[重复]
【发布时间】:2025-12-10 11:10:01
【问题描述】:

可能重复:
Can Mysql Split a column ?

我有一个字符串列和一个逗号分隔的列,如下所示

例如, 我有桌子,

Col1 | col2
1    | a,b,c
2    | d,e

从上面,我想要

Col1,Col2
1   ,a
1   ,b
1   ,c
2   ,d
2   ,e

如何实现这一点

这不是完全相同的副本。

【问题讨论】:

  • 你确定你想要那个昏迷吗? ;)
  • 抱歉,我在这里闻到了糟糕的数据库设计。您应该使用与第二个示例完全相同的表格(不带逗号)。
  • 此列在堆栈溢出时已被多次询问。见*.com/questions/1096679/can-mysql-split-a-column
  • @hsz : 不需要那个逗号@ user589983: 能否请您以简单的方式提供解决方案

标签: mysql split csv


【解决方案1】:

您可以使用存储过程来做到这一点

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 ;

【讨论】: