6 votes

Fractionnement de chaîne Mysql

Duplicata possible :
Mysql peut-il diviser une colonne ?

J'ai une colonne de chaînes de caractères et une colonne séparée par des virgules, comme suit

Exemple, J'ai le tableau,

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

D'en haut, je veux

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

Comment y parvenir ?

Il ne s'agit pas d'une copie exacte.

23voto

Johan Points 34755

Vous pouvez le faire à l'aide d'une procédure stockée

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 ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X