Maison >base de données >tutoriel mysql >Comment diviser les valeurs séparées par des virgules dans une colonne MySQL en lignes distinctes ?

Comment diviser les valeurs séparées par des virgules dans une colonne MySQL en lignes distinctes ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-28 07:32:11748parcourir

How to Split Comma-Separated Values in a MySQL Column into Separate Rows?

Mysql String Split

Problème :

Vous avez une table avec une colonne contenant une virgule -valeurs séparées. Vous souhaitez diviser ces valeurs en lignes distinctes, chaque valeur correspondant à une ligne.

Par exemple, étant donné le tableau :

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

Vous souhaitez extraire les lignes suivantes :

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

Solution :

Cela peut être réalisé en utilisant une procédure stockée MySQL. Le script SQL suivant inclut à la fois la procédure stockée et la fonction qu'elle utilise :

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 ;

Pour utiliser cette procédure stockée, vous pouvez exécuter la requête suivante :

CALL BadTableToGoodTable();

Cela créera un nouvelle table appelée 'GoodTable' avec les données souhaitées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn