Diviser les lignes séparées par des virgules en SQL
En SQL, vous pouvez rencontrer des scénarios dans lesquels vous devez diviser une colonne contenant des valeurs séparées par des virgules en lignes individuelles. Ceci peut être réalisé grâce à diverses techniques, notamment des requêtes SQL pures ou des outils externes.
Un moyen efficace de diviser des lignes séparées par des virgules en SQL pur consiste à utiliser une combinaison des fonctions SUBSTRING_INDEX()
et CROSS JOIN
. SUBSTRING_INDEX()
La fonction extrait une sous-chaîne d'une chaîne donnée en fonction du délimiteur et de la position spécifiés. CROSS JOIN
La fonction multiplie plusieurs lignes de différentes tables, créant ainsi un produit cartésien.
En utilisant ces fonctions, vous pouvez générer une séquence de nombres et la parcourir. Pour chaque nombre, vous pouvez utiliser la fonction SUBSTRING_INDEX()
pour extraire les valeurs souhaitées séparées par des virgules de la colonne source. Voici un exemple de requête :
<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 crée une séquence de nombres de 1 à 100 et parcourt celle-ci pour extraire les valeurs séparées par des virgules de chaque ligne source. La fonction SUBSTRING_INDEX()
permet d'extraire la valeur souhaitée en fonction de la position du nombre dans la séquence. La clause WHERE
garantit que seules les valeurs existantes séparées par des virgules sont extraites, évitant ainsi les erreurs hors limites.
Vous pouvez également utiliser une table de comptage persistante pour générer des séquences numériques et simplifier les requêtes. La requête résultante sera similaire à la requête ci-dessus, mais la sous-requête sera remplacée par une référence à la table de comptage.
Ensemble, ces techniques vous permettent de diviser des lignes séparées par des virgules dans SQL sans avoir besoin de requêtes complexes ou d'outils externes. Le choix de la méthode dépend des exigences spécifiques de l'application et des considérations de performances.
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!