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.

  • ✂️ Objectif : La fonction SUBSTRING() renvoie une portion spécifique d'une chaîne de caractères, étant donné l'expression source, une position de départ et une longueur.
  • (I.e. Trois arguments : L'expression, la position de départ et la longueur totale sont toutes obligatoires dans la fonction SUBSTRING() de SQL Server.
  • 📍 Indice basé sur un : La position de départ est indexée à partir de 1, donc le premier caractère compte comme la position un, ce qui évite les erreurs de décalage d'une position.
  • ???? Avec CHARINDEX : L'association de SUBSTRING() et de CHARINDEX() permet de localiser un délimiteur et d'extraire un élément.tracc'est le texte qui le précède ou le suit.
  • ↔️ Contre GAUCHE et DROITE : Contrairement à LEFT() et RIGHT(), SUBSTRING()tracts caractères de n'importe quelle position, pas seulement des extrémités.
  • ⚠️ Cas limites : Une longueur NULL renvoie NULL, tandis qu'une longueur supérieure à la chaîne renvoie le reste sans générer d'erreur.

Fonction SUBSTRING() dans SQL Server avec exemples en T-SQL

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 :

Diagramme montrant comment SUBSTRING() extraccaractères ts à partir d'une position de départ pour une longueur donnée

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 :

Guru99 exemples de tableau avec les colonnes Tutorial_ID et Tutorial_name utilisées dans les exemples SUBSTRING

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.

Grille de résultats renvoyant les deux premiers caractères de Tutorial_name comme sous-colonne

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.

Grille de résultats renvoyant le reste de Tutorial_name lorsque la longueur demandée dépasse la chaîne

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.

FAQ

SQL Server utilise SUBSTRING() ; SUBSTRING() est le nom utilisé dans Oracle et MySQLLes deux fonctions renvoient une portion de chaîne, mais SUBSTRING() est la fonction standard Transact-SQL, donc SUBSTRING() ne fonctionnera pas sur SQL Server.

Oui. Puisque SUBSTRING() renvoie une valeur, elle peut figurer dans les clauses WHERE, SELECT et ORDER BY. Le filtrage par SUBSTRING() évite généralement une recherche d'index ; par conséquent, une requête LIKE est souvent plus rapide pour les recherches par préfixe.

Oui, mais SQL Server convertit d'abord la valeur en chaîne de caractères, soit implicitement, soit via CAST ou CONVERT. La position de départ et la longueur sont ensuite comptabilisées en caractères, et non en chiffres ou en parties de date ; il est donc important de formater la valeur avec soin.

La forme à trois arguments se comporte de manière similaire, mais les détails diffèrent. MySQL autorise également SUBSTR() et les positions de départ négatives, tandis que SQL Server utilise SUBSTRING() et traite un départ inférieur à un en utilisant une règle de longueur effective.

La fonction SUBSTRING() renvoie le même type que son entrée : varchar pour les données de type caractère, nvarchar pour le texte Unicode et varbinary pour les expressions binaires. La longueur dépend de la sous-chaîne demandée, et non de la colonne source entière.

enveloppeping L'utilisation d'une colonne dans la fonction SUBSTRING() d'une clause WHERE rend le prédicat non indexable ; SQL Server ne peut donc pas effectuer de recherche d'index sur cette colonne. Pour les correspondances par préfixe, un modèle LIKE 'valeur%' est généralement plus performant.

Oui. Copilote GitHub Il est possible de rédiger des expressions SUBSTRING() et CHARINDEX(), y compris l'analyse syntaxique basée sur les délimiteurs, à partir d'une invite en langage naturel. Vérifiez toujours la position de départ, la longueur et l'indexation à partir de 1 avant d'exécuter la requête.

Les assistants d'IA et d'apprentissage automatique traduisent les règles en langage naturel en combinaisons SUBSTRING(), CHARINDEX(), LEFT() et RIGHT(), suggèrent des calculs de longueur et signalent les erreurs d'insertion/délétion. Le développeur vérifie chaque suggestion avant son déploiement.

Résumez cet article avec :