Maison >base de données >tutoriel mysql >Comment convertir des valeurs séparées par des virgules en lignes individuelles dans MySQL ?

Comment convertir des valeurs séparées par des virgules en lignes individuelles dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-14 08:30:42613parcourir

How to Convert Comma-Separated Values into Individual Rows in MySQL?

Transformation de valeurs séparées par des virgules en lignes individuelles dans MySQL

Ce guide montre comment convertir les valeurs séparées par des virgules dans une colonne MySQL en lignes individuelles. Disons que vous avez une table avec une colonne contenant des données délimitées par des virgules comme celle-ci :

<code>somethingA,somethingB,somethingC
somethingElseA, somethingElseB</code>

L'objectif est de restructurer ces données en :

<code>somethingA
somethingB
somethingC
somethingElseA
somethingElseB</code>

Cette requête SQL réalise cette transformation :

<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>

Explication :

Cette requête utilise intelligemment une table de nombres générée dynamiquement (la sous-requête) et la fonction SUBSTRING_INDEX(). SUBSTRING_INDEX() extrait les sous-chaînes en fonction d'un délimiteur. Le tableau des nombres fournit l'index pour chaque valeur séparée par des virgules. La clause WHERE garantit que la requête ne traite que les valeurs correspondant au nombre réel d'éléments séparés par des virgules dans chaque ligne.

Points clés :

  • SUBSTRING_INDEX(string, delimiter, count) : Cette fonction est cruciale. string est l'entrée, delimiter est la virgule et count spécifie quelle occurrence du délimiteur utiliser. Un count de -1 obtient tout après la dernière occurrence du délimiteur.
  • La sous-requête crée une table de nombres temporaire. Vous pouvez le remplacer par une table de nombres préexistante pour améliorer les performances si vous effectuez fréquemment ce type d'opération.
  • La clause WHERE ajuste dynamiquement le nombre de lignes renvoyées en fonction du nombre de virgules dans la chaîne d'origine, évitant ainsi les erreurs.

Cette méthode divise efficacement les valeurs séparées par des virgules en lignes individuelles, ce qui donne un ensemble de données plus propre et plus gérable.

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!

Déclaration:
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