Diviser les lignes séparées par des virgules en SQL
Question :
Comment diviser une colonne contenant des valeurs séparées par des virgules en lignes distinctes dans SQL (MySQL) ?
Réponse :
MySQL ne fournit pas de fonction intégrée pour diviser les valeurs de lignes séparées par des virgules. Cependant, vous pouvez utiliser une méthode non conventionnelle pour y parvenir, qui implique de compter les nombres et la fonction SUBSTRING_INDEX() de MySQL :
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN ( SELECT a.N + b.N * 10 + 1 n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a, (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b ORDER BY n ) n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
Cette requête utilise la fonction SUBSTRING_INDEX() pour extraire des valeurs individuelles en spécifiant une virgule comme délimiteur et une valeur n comme position de division. Les nombres de comptage sont générés à l'aide d'une sous-requête qui crée une plage de nombres de 1 à 100, vous permettant de diviser jusqu'à 100 valeurs séparées par ligne.
Pour la méthode de table de comptage persistante, utilisez la requête suivante :
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN tally n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
Cette méthode a une meilleure évolutivité si vous devez diviser un grand nombre de lignes contenant des valeurs séparées par des virgules.
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!