Découper une chaîne SQL Server avec séparateur vers plusieurs lignes




Comment découper une chaîne de caractères avec séparateurs vers des lignes en SQL? Pour découper une chaîne de caractère composées d’éléments séparés par des virgules, des points-virgules, des tabulations, ou encore des points par exemple, la manière la plus efficace et la plus propre est d’utiliser les fonctions XML intégrées au langage SQL Server.

Découper une chaîne de caractère d’une colonne unique vers plusieurs lignes avec SQL Server

 

Nous utilisons donc du T-SQL pour découper la chaîne de caractère sous SQL Server en une seule requête. Par exemple pour découper cette chaîne de caractères facilement:
« Paris.Lyon.Marseille.Nice.Toulouse.Bordeaux.Lille.Grenoble.Nantes », nous utilisons le code suivant.

-- Déclaration des variables
DECLARE @Chaine 	nvarchar(max),
@Separateur char(1),
@ChaineXML 	xml

-- Assignation des variables et du séparateur, ici avec un point
SELECT @Chaine = 'Paris.Lyon.Marseille.Nice.Toulouse.Bordeaux.Lille.Grenoble.Nantes',
@Separateur = '.'

-- Construction de la châine XML avec la fonction CONVERT()
SELECT @ChaineXML = CONVERT(xml,' ' +
REPLACE(@Chaine,@Separateur,' ') +
' ')

-- Sélection du résultat en parcourant la chaîne XML contenue dans la variable @ChaineXML
SELECT 	[Value] = Resultat.c.value('.','varchar(50)')
FROM 	@ChaineXML.nodes('/root/niveau') Resultat(c)

 

Si la chaîne de caractère est contenue dans une colonne d’une table SQL Server, il suffit alors d’initialiser la chaîne de caractère à partir d’une requête SQL, comme cela :

SELECT 	@Chaine = Colonne
FROM  	MATABLE;