Mysql String Split : développer les lignes avec des valeurs séparées par des virgules
Dans cette question, l'utilisateur cherche une solution pour convertir une table en contenant une colonne de chaîne avec des valeurs séparées par des virgules dans un nouveau tableau avec plusieurs lignes, en divisant les valeurs par des virgules. Bien que la question prétende ne pas être une copie exacte d'un fil de discussion existant, elle partage des similitudes.
Pour répondre à cette exigence, une procédure stockée peut être utilisé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 ;
Cette procédure stockée initialise une variable entière i. Il parcourt chaque valeur de chaîne dans la colonne col2, en utilisant la fonction strSplit pour extraire la sous-chaîne correspondante à la position i. La sous-chaîne extraite représente l'une des valeurs séparées par des virgules.
La procédure continue, en incrémentant i à chaque itération, jusqu'à ce qu'il n'y ait plus de sous-chaînes non nulles. Cela garantit que toutes les valeurs séparées par des virgules sont divisées et insérées dans la nouvelle table.
En résumé, cette procédure stockée fournit une solution robuste pour convertir une table avec des valeurs séparées par des virgules en une table avec plusieurs lignes, ce qui rend il est plus facile de manipuler et d'analyser les donné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!