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
Libérer: 2024-11-28 07:32:11
original
691 Les gens l'ont consulté

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 ;
Copier après la connexion

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

CALL BadTableToGoodTable();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal