SQL split values to multiple rows

前端 未结 9 1587
刺人心
刺人心 2020-11-21 05:28

I have table :

id | name    
1  | a,b,c    
2  | b

i want output like this :

id | name    
1  | a    
1  | b    
1  | c             


        
9条回答
  •  日久生厌
    2020-11-21 05:37

    I have take the reference from here with changed column name.

    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 (id, name)
          SELECT id, strSplit(name, ',', i) FROM BadTable
          WHERE strSplit(name, ',', i) IS NOT NULL;
        SET i = i + 1;
        UNTIL ROW_COUNT() = 0
      END REPEAT;
    END $$
    
    DELIMITER ;
    

提交回复
热议问题