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

Fonctionnement de la fonction CHARINDEX() dans SQL Server (T-SQL)

Dans SQL Server, vous pouvez utiliser le T-SQL CHARINDEX() fonction pour trouver la position de départ d'une expression de caractère dans une autre expression de caractère.

Vous fournissez les deux expressions de caractères comme arguments. Vous pouvez également fournir un argument facultatif pour spécifier une position à partir de laquelle commencer la recherche.

Syntaxe

La syntaxe ressemble à ceci :

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

expressionToFind est l'expression que vous voulez trouver dans l'autre chaîne, et expressionToSearch est l'autre chaîne. Le start_location facultatif peut être utilisé pour spécifier une position dans expressionToSearch pour lequel commencer la recherche.

Notez que seule la position de la première occurrence est renvoyée.

Exemple

Voici un exemple :

SELECT CHARINDEX('Bob', 'Bob aime la bière. Bob aime aussi le boeuf.') AS Result;

Résultat :

+----------+| Résultat ||----------|| 1 |+----------+

Dans cet exemple, le premier argument est Bob , ce qui signifie que nous recherchons le deuxième argument pour Bob . Le résultat est 1 car c'est la position où Bob apparaît en premier dans le deuxième argument.

Vous remarquerez peut-être aussi que Bob apparaît en fait deux fois dans la chaîne, mais seule la position de la première correspondance est renvoyée.

Aucune correspondance

Si le deuxième argument ne contient pas Bob le résultat aurait été 0 .

SELECT CHARINDEX('Bob', 'Kate aime la bière. Kate aime aussi le boeuf.') AS Result;

Résultat :

+----------+| Résultat ||----------|| 0 |+----------+

Spécifier une position de départ

Vous pouvez (facultatif) spécifier une position de départ pour la recherche. Cela signifie que SQL Server ignorera toute occurrence qui précède cette position de départ. Cependant, les résultats sont toujours rapportés en fonction de sa position dans la chaîne entière (et non à partir de la position de départ que vous avez choisie).

Voici un exemple pour illustrer :

SELECT CHARINDEX('Bob', 'Bob aime la bière. Bob aime aussi le boeuf.', 16) AS Result;

Résultat :

+----------+| Résultat ||----------|| 17 |+----------+

Dans cet exemple, nous commençons la recherche à la position 16 (qui se trouve être l'espace avant le 2ème Bob ). Le résultat est que la première occurrence de Bob est sauté et la position du second est renvoyée. Et nous pouvons voir que sa position est de 17 caractères à partir du début de la chaîne (même s'il n'y a qu'un seul caractère à partir duquel nous avons commencé la recherche).

Sensibilité à la casse

Vous pouvez explicitement effectuer une recherche sensible à la casse en ajoutant le COLLATE clause à votre SELECT déclaration :

Voici un exemple qui inclut une recherche sensible à la casse et une recherche insensible à la casse :

SELECT CHARINDEX('Bière', 'Bob aime la bière.' COLLATE Latin1_General_CS_AS) AS 'Sensible à la casse', CHARINDEX('Bière', 'Bob aime la bière.' COLLATE Latin1_General_CI_AS) AS 'Insensible à la casse'; 

Résultat :

+------------------+--------------------+| Sensible à la casse | Insensible à la casse ||------------------+--------------------|| 0 | 11 |+------------------+--------------------+

Le premier est sensible à la casse car _CS (dans la collation) signifie Case-Sensitive. Le second est insensible à la casse car _CI signifie Insensible à la casse.