2011-05-27 98 views
4

可能重复:
Can Mysql Split a column ?Mysql的字符串分割

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

实施例, 我有表,

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

从上面,我想

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

如何实现这个

这是不准确的复制。

+3

可以做你确定你想要的昏迷? ;) – hsz 2011-05-27 12:20:59

+3

对不起,但我在这里闻到不好的数据库设计。您应该使用与第二个示例完全相同的表格(不含逗号)。 – kapa 2011-05-27 12:22:27

+1

此列在堆栈溢出时被多次询问。请参阅http://stackoverflow.com/questions/1096679/can-mysql-split-a-column – garnertb 2011-05-27 12:24:05

回答

21

您此使用存储过程

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 ;