Exemple de script pour découper un texte délimité par un caractère en plusieurs colonnes distinctes.
Ce tutoriel explique comment découper un texte stocké dans une variable en colonnes indépendantes avec du code SQL Server. Travailler avec des données délimitées par des virgules ou des points-virgules nécessite souvent des techniques de manipulation efficaces et efficaces. Une tâche courante consiste à diviser une variable de texte unique en plusieurs colonnes.
Cela est particulièrement utile pour préparer les importations de fichiers CSV ou pour restructurer des données. Dans cet article, nous allons explorer une méthode simple pour y parvenir en utilisant T-SQL. En effet, dans le tutoriel précédent sur la division de chaînes, nous avons discuté de la façon de découper un texte délimité stocké dans une variable en une seule colonne, une valeur par colonne.
Script pour découper un texte en colonnes distinctes avec SQL Server
Le script présenté ci-dessous permet donc de diviser une chaîne composée de données séparées par des points-virgules en plusieurs colonnes codées en dur.
-- Déclarer les variables DECLARE @String nvarchar(max), @Delimiter char(1); -- Initialiser la chaîne et le délimiteur SELECT @String = 'New York;Los Angeles;Chicago;Houston;Phoenix;Philadelphie;San Antonio;San Diego;Dallas;San Jose', @Delimiter = ';' ; -- Diviser la chaîne en plusieurs colonnes WITH cte AS ( SELECT value, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) as id FROM STRING_SPLIT(@String, @Delimiter) ) SELECT MAX(CASE WHEN id = 1 THEN value END) AS colonne_1, MAX(CASE WHEN id = 2 THEN value END) AS colonne_2, MAX(CASE WHEN id = 3 THEN value END) AS colonne_3, MAX(CASE WHEN id = 4 THEN value END) AS colonne_4, MAX(CASE WHEN id = 5 THEN value END) AS colonne_5, MAX(CASE WHEN id = 6 THEN value END) AS colonne_6, MAX(CASE WHEN id = 7 THEN value END) AS colonne_7, MAX(CASE WHEN id = 8 THEN value END) AS colonne_8, MAX(CASE WHEN id = 9 THEN value END) AS colonne_9, MAX(CASE WHEN id = 10 THEN value END) AS colonne_10 FROM cte;
La requête fournie montre comment diviser une chaîne séparée par des points-virgules en colonnes individuelles. Les étapes sont les suivantes :
Explication du code SQL Server pour découper une chaîne délimitée
Cette section explique étape par étape le code ci-dessus pour mieux comprendre les concepts. Le code divise simplement le texte délimité par des points-virgules en colonnes distinctes en utilisant le code SQL Server.
Étape 1 : Déclarer les variables SQL Server
Nous commençons par déclarer deux variables :
@String
pour stocker le texte à découper@Delimiter
pour le caractère séparateur
DECLARE @String nvarchar(max), @Delimiter char(1);
Étape 2 : Initialiser les variables T-SQL avec le texte et le séparateur
Initialisez @String
avec les valeurs séparées par des points-virgules et réglez @Delimiter
sur le caractère point-virgule.
SELECT @String = 'New York;Los Angeles;Chicago;Houston;Phoenix;Philadelphie;San Antonio;San Diego;Dallas;San Jose', @Delimiter = ';'
Étape 3 : Découper le texte en plusieurs colonnes
La fonction STRING_SPLIT
est utilisée dans une Expression de Table Commune (CTE) pour diviser la chaîne. ROW_NUMBER
attribue un entier séquentiel unique à chaque valeur divisée.
WITH cte AS ( SELECT value, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) as id FROM STRING_SPLIT(@String, @Delimiter) )
Étape 4 : Sélectionner les colonnes
Enfin, nous utilisons une instruction SELECT
avec plusieurs clauses MAX(CASE...)
pour transformer ces valeurs en colonnes séparées.
SELECT MAX(CASE WHEN id = 1 THEN value END) AS colonne_1, MAX(CASE WHEN id = 2 THEN value END) AS colonne_2, MAX(CASE WHEN id = 3 THEN value END) AS colonne_3, MAX(CASE WHEN id = 4 THEN value END) AS colonne_4, MAX(CASE WHEN id = 5 THEN value END) AS colonne_5, MAX(CASE WHEN id = 6 THEN value END) AS colonne_6, MAX(CASE WHEN id = 7 THEN value END) AS colonne_7, MAX(CASE WHEN id = 8 THEN value END) AS colonne_8, MAX(CASE WHEN id = 9 THEN value END) AS colonne_9, MAX(CASE WHEN id = 10 THEN value END) AS colonne_10 FROM cte;
Comme nous pouvons le voir, le code est relativement statique et adaptable, mais atteint un objectif différent de la fonction intégrée STRING_SPLIT.
Une solution en pur code SQL Server pour découper un texte en colonnes
Cette requête est un moyen simple mais efficace pour diviser un texte délimité en plusieurs colonnes avec SQL Server. Elle convient aux scénarios où le nombre de colonnes est fixe et ne dépasse pas dix. Bien sûr, il est très facilement modifiable pour gérer plus de colonnes.
Pour des cas plus complexes, tels qu’un nombre variable de colonnes, du code T-SQL dynamique peut être utilisé. Cette méthode est un outil pratique pour les développeurs SQL Server cherchant à rationaliser leurs processus d’import et de manipulation de données.
Soyez le premier à commenter