Maison > base de données > tutoriel mysql > Comment puis-je diviser les valeurs séparées par des virgules en lignes dans SQL Server ?

Comment puis-je diviser les valeurs séparées par des virgules en lignes dans SQL Server ?

DDD
Libérer: 2025-01-05 08:24:43
original
161 Les gens l'ont consulté

How Can I Split Comma-Separated Values into Rows in SQL Server?

Diviser les valeurs séparées par des virgules en lignes

Dans SQL Server, la conversion d'une chaîne séparée par des virgules stockée dans une colonne de table en plusieurs lignes peut être réalisé en utilisant une combinaison de techniques XML et de manipulation de chaînes. L'objectif est de convertir un tableau contenant une seule ligne avec une chaîne séparée par des virgules en un tableau comportant plusieurs lignes, chacune contenant une valeur unique de la chaîne d'origine.

Pour ce faire, suivez ces étapes :

  1. Convertir la chaîne en fragment XML : Enveloppez la chaîne séparée par des virgules avec des balises XML pour la transformer en fragment XML. Cette opération ajoute des balises d'ouverture et de fermeture à chaque valeur, créant ainsi une structure XML hiérarchique.
  2. Utilisez CROSS APPLY pour diviser le fragment XML : Utilisez l'opérateur CROSS APPLY pour diviser le fragment XML en éléments individuels nœuds. Chaque nœud représente une valeur unique dans la chaîne d'origine.
  3. Extraire la valeur du nœud : Appliquez la méthode VALUE() à chaque nœud pour extraire la valeur réelle sous forme de chaîne. Cela reconvertit le nœud XML en un type de données utilisable.
  4. Combinez l'identifiant et les valeurs extraites : Joignez les valeurs extraites à la colonne identifiant de la table d'origine pour créer la nouvelle table. Cela garantit que chaque valeur est associée à sa ligne correspondante dans la table d'origine.

Voici un exemple de requête qui illustre ce processus :

SELECT A.[id],
       Split.a.value('.', 'VARCHAR(100)') AS String
FROM (SELECT [id],
             CAST ('<M>' + REPLACE([string], ',', '</M><M>') + '</M>' AS XML) AS String
         FROM TableA) AS A CROSS APPLY String.nodes ('/M') AS Split(a);
Copier après la connexion

Cette requête produira le résultat souhaité. , où chaque ligne du tableau d'origine est développée en plusieurs lignes, chacune contenant une seule valeur de la chaîne séparée 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal