Maison >base de données >tutoriel mysql >Comment diviser des valeurs séparées par des virgules en plusieurs lignes dans SQL ?
Diviser les valeurs en plusieurs lignes dans SQL
Une tâche courante dans le traitement des données consiste à diviser une chaîne séparée par des virgules en plusieurs lignes, comme illustré par ce qui suit request :
Problème :
Étant donné une table avec une colonne id et une colonne name contenant des valeurs séparées par des virgules, renvoyez les données au format suivant :
id | name |
---|---|
1 | a |
1 | b |
1 | c |
2 | b |
Solution :
Pour y parvenir, nous pouvons tirer parti La fonction SUBSTRING_INDEX de MySQL en conjonction avec une table de nombres qui contient une séquence de nombres jusqu'au nombre maximum de champs à diviser. La requête ci-dessous illustre cette approche :
SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n
Si la création d'une table de nombres n'est pas réalisable, nous pouvons utiliser la requête suivante pour générer la séquence de nombres dans la requête elle-même :
SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM ( SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) AS numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n
Démo :
[SQL Fiddle Démo](https://www.sqlfiddle.com/#!5/cf4386/1)
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!