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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-14 09:21:11684parcourir

How to Split Comma-Separated Values into Rows in MySQL?

Transformation de données séparées par des virgules dans MySQL

Ce guide explique comment convertir efficacement les valeurs séparées par des virgules dans une colonne MySQL en lignes individuelles. Nous exploiterons les fonctions MySQL et une technique intelligente :

  1. Création d'une séquence de nombres : Tout d'abord, générez une table temporaire (ou utilisez une table existante) contenant une séquence d'entiers. Cette séquence doit être supérieure au nombre maximum de valeurs séparées par des virgules dans votre colonne cible. Cette séquence fera office d'index pour extraire les valeurs individuelles.

  2. Tirer parti de SUBSTRING_INDEX : La fonction SUBSTRING_INDEX est essentielle ici. Il extrait les sous-chaînes en fonction d'un délimiteur et d'une occurrence spécifiée. Nous l'utiliserons deux fois, en conjonction avec la séquence de nombres, pour isoler chaque valeur.

Voici un exemple illustrant cette approche :

<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) AS value
FROM table1 t
CROSS JOIN (SELECT a.N + b.N * 10 + c.N * 100 AS 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
    ,(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) c
) n
WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>

Explication :

  • L'instruction SELECT imbriquée crée une séquence de nombres (ajustez selon les besoins de vos données).
  • CROSS JOIN combine cette séquence avec votre table (table1).
  • SUBSTRING_INDEX(t.values, ',', n.n) extrait la sous-chaîne jusqu'à la nème virgule.
  • SUBSTRING_INDEX(..., ',', -1) extrait ensuite la valeur du résultat précédent jusqu'à la fin de la chaîne.
  • La clause
  • WHERE garantit que nous traitons uniquement les valeurs situées dans les limites de la chaîne séparée par des virgules. La condition LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) 1 calcule dynamiquement le nombre de valeurs.

Cette méthode divise efficacement vos valeurs séparées par des virgules en lignes individuelles, fournissant ainsi une solution propre et efficace pour la manipulation des données dans MySQL. N'oubliez pas de remplacer table1 et values par les noms réels de vos tables et colonnes.

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