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

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

Barbara Streisand
Libérer: 2025-01-14 11:25:43
original
528 Les gens l'ont consulté

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

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal