CHARINDEX (Transact-SQL)

Recherche une autre expression dans une expression et retourne sa position de départ, le cas échéant.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] ) 

Arguments

  • expressionToFind
    Expression de caractères qui contient la séquence à rechercher. expressionToFind est limitée à 8 000 caractères.

  • expressionToSearch
    Expression de caractères à rechercher.

  • start_location
    Expression integer ou bigint à laquelle démarre la recherche. Si la valeur de start_location n'est pas spécifiée, il s'agit d'un nombre négatif ou si elle est égale à zéro, la recherche commence au début de expressionToSearch.

Types de retour

Type bigint si expressionToSearch est du type de données varchar(max), nvarchar(max) ou varbinary(max) ; sinon int.

Notes

Si un des arguments expressionToFind ou expressionToSearch est d'un type de données Unicode (nvarchar ou nchar) et que l'autre ne l'est pas, ce dernier est systématiquement converti dans un type de données Unicode. La fonction CHARINDEX ne peut pas être utilisée avec les types de données text, ntext et image.

Si expressionToFind ou expressionToSearch est NULL, CHARINDEX retourne NULL.

Si l'argument expressionToFind est introuvable dans l'argument expressionToSearch, CHARINDEX retourne 0.

CHARINDEX effectue des comparaisons basées sur le classement de l'entrée. Pour exécuter une comparaison selon un classement spécifié, vous pouvez utiliser COLLATE pour appliquer à l'entrée un classement explicite.

La position de départ retournée est basée sur la valeur 1, et non sur la valeur 0.

0x0000 (char(0)) est un caractère indéfini dans les classements Windows et ne peut pas être inclus dans CHARINDEX.

Caractères supplémentaires (paires de substitution)

Lors de l'utilisation de classements SC, start_location et la valeur de retour comptent les paires de substitution comme s'il s'agissait d'un caractère, et non pas de deux. Pour plus d'informations, consultez Prise en charge d'Unicode et du classement.

Exemples

A.Retour de la position de départ d'une expression

L'exemple suivant retourne la position initiale de la séquence de caractères bicycle dans la colonne DocumentSummary de la table Document.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO

Voici l'ensemble des résultats.

----------- 
48          

B.Recherche à partir d'une position spécifique

L'exemple de code suivant utilise le paramètre facultatif start_location pour commencer la recherche de vital à compter du cinquième caractère de la colonne DocumentSummary.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.';
SELECT CHARINDEX('vital', @document, 5);
GO

Voici l'ensemble des résultats.

----------- 
16          

(1 row(s) affected)

C.Recherche d'une expression inexistante

L'exemple suivant illustre le jeu de résultats obtenu lorsque l'argument expressionToFind est introuvable dans l'argument expressionToSearch.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO

Voici l'ensemble des résultats.

-----------

0

(1 row(s) affected)

D.Recherche respectant la casse

L'exemple suivant effectue une recherche qui respecte la casse pour la chaîne 'TEST' dans 'Das ist ein Test'.

USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

Voici l'ensemble des résultats.

-----------

0

L'exemple suivant effectue une recherche qui respecte la casse de la chaîne 'Test' dans 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

Voici l'ensemble des résultats.

-----------

13

E.Recherche ne respectant pas la casse

L'exemple suivant effectue une recherche qui ne respecte pas la casse de la chaîne 'TEST' dans 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CI_AS)
GO

Voici l'ensemble des résultats.

-----------

13

Voir aussi

Référence

Fonctions de chaîne (Transact-SQL)

+ (Concaténation de chaîne) (Transact-SQL)

Concepts

Prise en charge d'Unicode et du classement