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!