Un jour ou l'autre, on a
tous besoin de séparer une chaîne de caractères en jetons. Que ce
soit parce que l'on recoit en paramètre une liste d'identifiant ou une
liste d'article, il nous faudra découper cette chaîne en différents
jetons pour exécuter notre traitement.
SQL Server ne nous offre
pas de fonctionnalité de base pour découper une chaîne de
caractères selon un caractère de séparation, comme le fait
String.Split sur la plateforme .NET, ou comme la fonction strtok en
C. Par contre, il existe une technique toute simple en SQL qui nous
permet de le faire.
La technique consiste à
se créer une table temporaire contenant toutes les positions du caractère
de séparation, puis à y appliquer le découpage de la chaîne en fonction de
cette table.
Prenons par exemple les 10
premiers produits de la table Production.Product de la base de
données AdventureWorks.
Pour séparer cette
chaîne, nous allons nous construire une table contenant les
positions du caractère ',' en utilisant une expression de table
commune recursive.
La petite particularité
que nous avons ici est que, pour le dernier enregistrement, nous
avons la valeur 0 comme position de fin. Pour contourner ce petit
problème, on utilise l'instruction CASE WHEN pour remplacer la
valeur zéro par l
Si l'ordre est jeton est
nécessaire, on peut ajouter la position dans la table temporaire
pour nous aider à retrouver un jeton en particulier.
Références:
Aucun commentaire:
Publier un commentaire