Couper un texte délimité avec XML ou String_Split en Sql Server

Comment couper un texte délimité avec XML ou String_Split en SQL Server ? La chaîne à découper peut comporter un délimiteur de type virgule ou point-virgule. En utilisant une requête SQL Server, vous pouvez couper une chaîne composée de texte, délimitée par des virgules, des points-virgules, des tabulations, des tirets, des tirets bas ou même des points.

Il peut s’agir en fait de n’importe quel caractère qui définit un texte délimité. En effet, dans les versions précédentes à SQL Server 2016, le moyen le plus simple et le plus efficace est d’utiliser les fonctions XML intégrées SQL Server comme CONVERT et NODES. Utilisez ensuite une requête Transact-SQL pour diviser le texte en plusieurs lignes.

En effet, la puissance des fonctions XML permet au développeur SQL d’analyser et de structurer le texte plus facilement. Par exemple, découpons facilement cette chaîne contenant les dix plus grandes villes américaines délimitées par des points-virgules :

“New York ; Los Angeles ; Chicago ; Houston ; Phoenix ; Philadelphie ; San Antonio ; San Diego ; Dallas ; San Jose”

Couper un texte délimité en lignes avec XML sur les versions précédentes à SQL Server 2016

Cette solution permet de découper les textes sur les versions antérieures à SQL Server 2016, comme SQL Server 2008 R2, SQL Server 2012 et SQL Server 2014 par exemple.

Cet exemple fonctionne avec tous les types de séparateurs, également appelés délimiteurs. Les plus utilisés étant les fichiers délimités les séparateurs suivants :

  • Virgules : ,
  • Point-virgules : ;
  • Tabulations : \t
  • Barres verticales : |
  • Tirets : –

Par exemple, cette requête Transact-SQL découpe la chaîne contenant la liste des villes délimitées par des points-virgules.

-- Déclaration des variables
DECLARE @String nvarchar(max),
@Delimiter char(1),
@XMLString xml ;

-- Initialisation de la chaîne de caractères et du délimiteur, ici c'est le caractère point-virgule
SELECT @String = 'New York;Los Angeles;Chicago;Houston;Phoenix;Philadelphie;San Antonio;San Diego;Dallas;San Jose',
@Delimiter = ';'

-- Construction d'une chaîne XML à l'aide de la fonction T-SQL CONVERT()
SET @XMLString =
CONVERT(xml,'' + REPLACE(@String,@Delimiter,'') + '')
SELECT @XMLString;

-- Sélection du résultat en analysant la variable @XMLString avec les fonctions XML .value() et .nodes()
SELECT Resultat.value('.', 'varchar(20)') AS CITY
FROM @XMLString.nodes('/root/city') AS T(Resultat);

En effet, pour comprendre la logique de la requête, la variable @XMLString ne contient que la liste initiale des villes. Cependant, cette fois-ci, les balises XML <root></root> et <city></city> entoure la liste des villes.

<root>
	<city>New York</city>
	<city>Los Angeles</city>
	<city>Chicago</city>
	<city>Houston</city>
	<city>Phoenix</city>
	<city>Philadelphia</city>
	<city>San Antonio</city>
	<city>San Diego</city>
	<city>Dallas</city>
	<city>San Jose</city>
</root>

De même, un autre article explique comment supprimer les sauts de ligne d’une chaîne de caractères SQL Server afin de la stocker sur une seule ligne d’une table.

Depuis la version SQL Server 2016 utiliser la fonction STRING_SPLIT pour séparer un texte délimité en lignes

En effet, veuillez noter qu’à partir de SQL Server 2016, une nouvelle fonction intégrée permet cette fonctionnalité. Il s’agit de la fonction String Split. Voici donc un exemple pour obtenir le même résultat en une seule ligne de code :

-- Déclaration de variables
DECLARE
	@String nvarchar(max),
	@Separator char(1);

-- Initialisation de la chaîne de caractères et du séparateur
SET @String = 'New York;Los Angeles;Chicago;Houston;Phoenix;Philadelphie;San Antonio;San Diego;Dallas;San Jose' ;
SET @Separator = ";";

-- Utilisez le Split String ici au lieu de la solution XML
SELECT @String = STRING_SPLIT (@String, @Separator);

En résumé, cet article montre comment couper un texte avec les fonctions XML ou la fonction Split_String sous SQL Server. Le premier exemple utilise les fonctions XML et il est facile à copier et coller. Le deuxième exemple utilise une unique fonction intégrée : Split_String.

Vous pouvez donc le réutiliser pour un scénario de projet réel ou autre Proof-Of-Concept. De même, le deuxième exemple utilise simplement la fonction native du serveur SQL Split_String.

Qu’est-ce qu’un texte délimité ?

Un texte délimité est une ligne unique qui comporte plusieurs parties. Chaque partie est délimitée par un symbole spécifique, par exemple, une demi-colonne, une tabulation, une barre verticale.

Qu’est-ce qu’un fichier texte avec séparateurs ?

Un fichier texte avec séparateurs est un fichier qui comporte plusieurs colonnes et chaque donnée contenue dans chaque ligne est délimitée par un séparateur. Par exemple, le séparateur de ligne lui-même est un retour chariot ou un saut de ligne.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*