La fonction Substring() dans SQL Server : comment l’utiliser avec un exemple
⚡ Résumé intelligent
SUBSTRING() dans SQL Server extracts une portion d'un caractère, d'un texte ou d'une expression binaire, renvoyant un nombre défini de caractères à partir d'une position de départ choisie, et s'associe naturellement avec CHARINDEX pour l'analyse basée sur un délimiteur.

Qu'est-ce que la sous-chaîne() ?
SUBSTRING() est une fonction dans SQL qui permet à l'utilisateur d'extraire une sous-chaîne de n'importe quelle chaîne donnée, selon ses besoins. SUBSTRING() extracLa fonction SUBSTRING() en SQL permet d'extraire une portion spécifique d'une chaîne de caractères, à partir d'un point donné dans une chaîne d'entrée.
Syntaxe pour Substring()
SUBSTRING(Expression, Starting Position, Total Length)
Ici:
- L'expression SUBSTRING() dans SQL Server Peut être n'importe quel caractère, valeur binaire, texte ou image. L'expression est la chaîne source à partir de laquelle la sous-chaîne est extraite.
- La position de départ détermine la position dans l'expression à partir de laquelle la nouvelle sous-chaîne doit commencer.
- La longueur totale correspond à la longueur totale attendue de la sous-chaîne résultant de l'expression, à partir de la position de départ.
Règles d'utilisation de SUBSTRING()
- Les trois arguments sont obligatoires dans la fonction SUBSTRING() de MS SQL.
- Si la position de départ est supérieure au nombre maximal de caractères dans l'expression, la fonction SUBSTRING() de SQL Server ne renvoie rien.
- La longueur totale peut dépasser la longueur maximale de caractères de la chaîne d'origine. Dans ce cas, la sous-chaîne résultante correspond à la chaîne entière, depuis la position de départ dans l'expression jusqu'au dernier caractère de celle-ci.
Le diagramme ci-dessous illustre l'utilisation de la fonction SUBSTRING() dans SQL Server :
Exemples de sous-chaînes T-SQL
Hypothèse : Supposons que nous ayons une table nommée «Guru99' avec deux colonnes et quatre lignes, comme indiqué ci-dessous. Nous utiliserons ce 'Gurutableau 99 dans les exemples suivants :
Requête 1: Utiliser SUBSTRING() en SQL avec une longueur inférieure à la longueur maximale totale de l'expression.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;
Résultat : Le diagramme ci-dessous affiche la sous-chaîne de la colonne « Tutorial_name » dans la colonne « SUB ». La position de départ est 1 et la longueur est de 2 ; les deux premiers caractères sont donc renvoyés.
Requête 2: SUBSTRING() dans SQL Server avec une longueur supérieure à la longueur maximale totale de l'expression.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;
Résultat : Le diagramme ci-dessous affiche la sous-chaîne de la colonne « Tutorial_name » dans la colonne « SUB ». Bien que la longueur de la sous-chaîne dépasse la longueur maximale totale de l’expression, aucune erreur n’est signalée et la requête renvoie la chaîne complète à partir de sa position initiale.
SOUS-STRIES avec CHARINDEX dans SQL Server
Une utilisation très courante de SUBSTRING() dans le monde réel consiste à extraire des valeurs.tracLe texte situé avant ou après un délimiteur, tel que le domaine dans une adresse e-mail, est appelé SUBSTRING(). La fonction SUBSTRING() nécessite une position de départ fixe, or la position d'un délimiteur varie d'une ligne à l'autre. La fonction CHARINDEX() résout ce problème en renvoyant la position d'un caractère dans une chaîne.
CHARINDEX(substring_to_find, expression [, start_location])
En imbriquant CHARINDEX() dans SUBSTRING(), la position de départ devient dynamique. L'exemple ci-dessous trouve la @ ce symbole renvoie tout ce qui suit. A variable contient la valeur de l'échantillon :
DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com'; SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;
Ici, CHARINDEX('@', @Email) localise la position du symbole @, incrémenter de 1 permet de le dépasser, puis SUBSTRING() extrait la chaîne.tracts les caractères restants. Pour la valeur ci-dessus, la requête renvoie le domaine gourou99.comCe modèle CHARINDEX-plus-SUBSTRING est la méthode standard pour analyser les chaînes structurées en T-SQL.
SUBSTRING vs LEFT et RIGHT dans SQL Server
SQL Server propose également les fonctions LEFT() et RIGHT() pour extraire des caractères au début ou à la fin d'une chaîne. Plus concises, elles sont toutefois limitées aux deux extrémités. SUBSTRING() est la plus flexible, car elle peut démarrer à n'importe quelle position. Le tableau ci-dessous les compare :
| Fonction | Arguments | Extracts de | Équivalent à SUBSTRING() |
| GAUCHE(expression, n) | 2 | Début de chaîne | SOUS-CHAÎNE(expression, 1, n) |
| DROITE(expression, n) | 2 | Fin de la chaîne | SOUS-CHAÎNE(expression, LONGUEUR(expression) – n + 1, n) |
| SOUS-CHAÎNE(expression, début, longueur) | 3 | Toute position | N'est pas applicable |
En bref, LEFT() et RIGHT() sont des raccourcis pratiques pour les extrémités d'une chaîne, tandis que SUBSTRING() gère le cas général, y compris les caractères extraits du milieu.
Arguments négatifs, nuls et NULL dans SUBSTRING
Au-delà des règles de base, il est utile de comprendre le comportement de SUBSTRING() aux extrémités de la chaîne. Lorsque la position de départ est nulle ou négative, SQL Server calcule une longueur effective de (début + longueur – 1) et commence la lecture à partir de la position 1. Si l'un des arguments est NULL, le résultat est NULL. Le tableau ci-dessous, vérifié par rapport à la documentation officielle, présente les informations complémentaires. SOUS-CHAÎNE (Transact-SQL) La référence présente ces cas :
| Appeler | Résultat | Raison |
| SOUS-CHAÎNE('Guru99', 1, 4) | Guru | Appel normal : quatre caractères à partir de la position un. |
| SOUS-CHAÎNE('Guru99', 0, 3) | Gu | Commencez en dessous de un : la longueur effective est 0 + 3 – 1 = 2. |
| SOUS-CHAÎNE('Guru99', 4, 100) | u99 | La longueur au-delà de la chaîne renvoie le reste, sans erreur. |
| SOUS-CHAÎNE('Guru99', 3, NULL) | NULL | Un argument NULL rend le résultat entier NULL. |
La connaissance de ces cas particuliers permet d'éviter les surprises lorsque la position de départ est calculée à partir d'une autre colonne ou d'une autre colonne. variable cela pourrait être zéro ou NULL.




