MySQL字符串分割

6

可能重复:
Mysql能够拆分列吗?

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

例如, 我有以下表,

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

从上面来看,我希望

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

如何实现这个功能 它不是完全重复的。

3
你确定你想要那些逗号吗? ;) - hsz
3
很抱歉,但我闻到了糟糕的数据库设计。您应该使用一个与第二个示例完全相同(不带逗号)的表格。 - kapa
1
这个问题在 stack overflow 上已经被问了多次。请参见 https://dev59.com/73NA5IYBdhLWcg3wF5qO - garnertb
@hsz:不需要那些逗号。@user589983:你能简单地给我提供解决方案吗? - StackflowLover
1个回答

23

你可以使用存储过程来实现这个功能

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 ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接