Maison > base de données > tutoriel mysql > Comment diviser des lignes séparées par des virgules dans SQL ?

Comment diviser des lignes séparées par des virgules dans SQL ?

DDD
Libérer: 2025-01-14 09:25:43
original
357 Les gens l'ont consulté

How to Split Comma-Separated Rows in SQL?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal