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

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

Patricia Arquette
Libérer: 2025-01-24 04:08:09
original
1033 Les gens l'ont consulté

How to Split Comma-Separated Values into Multiple Rows in SQL?

Diviser les valeurs en plusieurs lignes dans SQL

Une tâche courante dans le traitement des données consiste à diviser une chaîne séparée par des virgules en plusieurs lignes, comme illustré par ce qui suit request :

Problème :

Étant donné une table avec une colonne id et une colonne name contenant des valeurs séparées par des virgules, renvoyez les données au format suivant :

id name
1 a
1 b
1 c
2 b

Solution :

Pour y parvenir, nous pouvons tirer parti La fonction SUBSTRING_INDEX de MySQL en conjonction avec une table de nombres qui contient une séquence de nombres jusqu'au nombre maximum de champs à diviser. La requête ci-dessous illustre cette approche :

SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  numbers INNER JOIN tablename
  ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n
Copier après la connexion

Si la création d'une table de nombres n'est pas réalisable, nous pouvons utiliser la requête suivante pour générer la séquence de nombres dans la requête elle-même :

SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  (
    SELECT 1 AS n UNION ALL
    SELECT 2 UNION ALL SELECT 3 UNION ALL
    SELECT 4 UNION ALL SELECT 5
  ) AS numbers INNER JOIN tablename
  ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n
Copier après la connexion

Démo :

[SQL Fiddle Démo](https://www.sqlfiddle.com/#!5/cf4386/1)

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