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 ] )
Où 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.