Extraction de chaîne MySQL à partir de valeurs séparées par des virgules
Dans MySQL, il est souvent nécessaire d'extraire des valeurs individuelles d'une chaîne contenant plusieurs valeurs séparés par des virgules. Cela pose un défi car MySQL ne fournit pas nativement de fonction de division de chaîne.
Pour résoudre ce problème, nous pouvons exploiter une procédure stockée pour extraire les valeurs de manière itérative. Voici comment :
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 ;
Échantillon de données :
Col1 | Col2 |
---|---|
1 | a,b,c |
2 | d,e |
Résultat :
Col1 | Col2 |
---|---|
1 | a |
1 | b |
1 | c |
2 | d |
2 | e |
Utilisation :
Pour utiliser cette solution, créez une table nommée BadTable avec les données d'origine et une nouvelle table nommée GoodTable pour stocker les valeurs extraites. Ensuite, exécutez les commandes suivantes :
CALL BadTableToGoodTable(); SELECT * FROM GoodTable;
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!