Découper un Texte avec Séparateur en Colonne avec SQL Server

Comment découper un texte avec séparateurs en une colonne avec une requête SQL Server ?

Ce tutoriel explique pas à pas comment construire une requête pour découper un texte avec séparateur en colonne avec SQL Server. Habituellement un point-virgule ou une virgule sont utilisés comme délimiteurs. Avec une requête T-SQL dans SQL Server 2012, il est possible de découper une chaîne de texte basée sur un caractère spécial avec XML. Cela peut être des virgules, des points-virgules, des tabulations, des tirets, des soulignements ou même des points. En fait, cela peut être n’importe quel caractère spécial qui définit le texte délimité. Ce tutoriel est destiné aux versions de SQL Server antérieures à 2016, comme SQL Server 2008 et SQL Server 2012 par exemple.

1. Texte avec séparateur en colonne avec SQL Server 2008, 2012 et 2024

En effet, la manière facile et efficace est d’utiliser les fonctions intégrées XML de SQL Server telles que CONVERT() et NODES(). Puis d’utiliser une requête Transact-SQL pour diviser le texte en plusieurs lignes. La puissance des fonctions XML permet au développeur SQL de parser et structurer le texte plus facilement. Par exemple, découpons facilement cette chaîne contenant les dix plus grandes villes des États-Unis délimitées par des points-virgules :

« New York; Los Angeles; Chicago; Houston; Phoenix; Philadelphia; San Antonio; San Diego; Dallas; San Jose »

Cet exemple fonctionne avec tout type de séparateurs, également appelés délimiteurs. Les plus utilisés sont :

  • Fichier délimité par des virgules
  • Fichier délimité par des points-virgules
  • Fichier délimité par des tabulations
  • Fichier délimité par des barres verticales
  • Fichier délimité par des tirets

Et cette solution XML permet de diviser des textes sur des versions antérieures à SQL Server 2016, telles que : SQL Server 2008 R2, SQL Server 2012 et SQL Server 2014.

2. Requête T-SQL pour découper un texte avec séparateur en une colonne

Par exemple, cette requête Transact-SQL divise la chaîne contenant la liste des villes délimitées par des points-virgules en utilisant les fonctions intégrées XML.

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

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

-- Construction de la chaîne XML en utilisant la fonction T-SQL CONVERT()
SET @XMLString = 
CONVERT(xml,'<root><city>' +
REPLACE(@String,@Delimiter,'</city><city>') +
'</city></root>');

SELECT @XMLString;

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

3. Résultat intermédiaire de la chaîne divisée au format XML

En effet, pour comprendre la logique de la requête, cette chaîne délimitée était initialement contenue dans la variable @String, sous forme de texte simple. Et la variable @XMLString contient uniquement la liste initiale des villes au format XML. Cependant, cette fois, la liste est entourée de balises XML <root></root> et <city></city>. XML est un format de données complexe couramment utilisé dans les fichiers d’échange de données.

<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>
Découper une chaîne de texte avec séparateur en une colonne avec SQL Server
Découper une chaîne de texte avec séparateur en une colonne avec SQL Server

Différentes manières de découper un texte avec séparateur

Pour résumer, cet article explique comment découper un texte avec séparateur en colonne avec SQL Server. Le premier exemple utilise les fonctions XML et il est facile de copier et coller. Ainsi, réutilisez-le pour un scénario de projet réel ou une preuve de concept. De même, pour SQL Server 2016 et les versions ultérieures, vous pouvez simplement utiliser la fonction native Split_String.

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

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

Qu’est-ce qu’un fichier texte avec délimiteurs ?

Un fichier texte délimité est un fichier qui a plusieurs colonnes et chaque donnée contenue sur 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.

De même, vous pourriez être intéressé à apprendre comment ajouter ou supprimer des sauts de ligne des chaînes SQL Server afin de les stocker dans une seule ligne d’une table. Et en même temps éviter les décalages de ligne lors de l’importation de fichiers.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*