Database
 sql >> Base de données >  >> RDS >> Database

Comment extraire une sous-chaîne d'une chaîne dans T-SQL

Problème :

Vous avez une colonne de chaînes et vous aimeriez en obtenir des sous-chaînes.

Exemple 1 :

Dans les emails table, il y a une colonne email. Vous souhaitez afficher les sept premiers caractères de chaque e-mail.

Le tableau ressemble à ceci :

e-mail
[email protected]
[email protected]
[email protected]
[email protected]

Solution 1 :

SELECT
  email,
  SUBSTRING(email, 1, 7) AS substring
FROM emails;

Le résultat est :

e-mail sous-chaîne
[email protected] jake99@
[email protected] tamarab
[email protected] noter@
[email protected] jessica

Discussion :

Utilisez le SUBSTRING() une fonction. Le premier argument est la chaîne ou le nom de la colonne. Le deuxième argument est l'index du caractère auquel la sous-chaîne doit commencer. Le troisième argument est la longueur de la sous-chaîne.

Fais attention! Contrairement à certains autres langages de programmation, les index commencent à 1 , pas 0. Cela signifie que le premier caractère a l'index 1, le deuxième caractère a l'index 2, etc.

SUBSTRING(email, 1, 7) renverra les sous-chaînes des valeurs dans le email colonne qui commence au premier caractère et va jusqu'à sept caractères.

Exemple 2 :

Vous souhaitez afficher la sous-chaîne entre les index 2 et 6 (inclus).

Solution 2 :

SELECT
  email,
  SUBSTRING(email, 2, 5) AS substring
FROM emails;

Le résultat est :

e-mail sous-chaîne
[email protected] ake99
[email protected] amara
[email protected] noter
[email protected] essic

Discussion :

Vous utilisez le SUBSTRING() fonctionnent comme dans les exemples précédents. Cette fois, le deuxième argument de la fonction est 2 , puisque nous voulons commencer à l'index 2. La longueur de la sous-chaîne est de 5 (end_index - start_index + 1 ).

Exemple 3 :

Vous souhaitez afficher la sous-chaîne commençant par @ signe et se termine à la fin de la chaîne, mais vous ne connaissez pas les index ou les longueurs exacts.

Solution 3 :

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) AS substring
FROM emails;

Le résultat est :

e-mail sous-chaîne
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Discussion :

Vous utilisez le SUBSTRING() fonctionnent comme dans les exemples précédents. Cette fois, vous recherchez un personnage spécifique dont la position peut varier d'une ligne à l'autre. Pour trouver l'index du caractère spécifique, vous pouvez utiliser le CHARINDEX(character, column) fonction où caractère est le caractère spécifique auquel vous souhaitez commencer la sous-chaîne (ici, @ ). La colonne d'argument est la colonne à partir de laquelle vous souhaitez récupérer la sous-chaîne ; il peut également s'agir d'une chaîne littérale.

Le troisième argument du SUBSTRING() fonction est la longueur de la sous-chaîne. Vous pouvez le calculer en utilisant le CHARINDEX() et le LEN() les fonctions. Pour ce faire, soustrayez l'index de la longueur de la colonne, puis ajoutez 1 :

LEN(email) - CHARINDEX('@', email) + 1

Vous pouvez également vouloir récupérer une sous-chaîne qui ne se termine pas à la fin de la chaîne mais à un caractère spécifique, par exemple, avant '. '. Voici comment procéder :

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', email)) AS substring
FROM emails;

Le résultat de cette requête est :

e-mail sous-chaîne
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

La partie CHARINDEX('.', email) - CHARINDEX('@', email) calcule simplement la longueur de la sous-chaîne.