Découper un texte en colonnes avec SQL Server

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 :

  1. @String pour stocker le texte à découper
  2. @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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*