CHARINDEX (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

Cette fonction recherche une expression de caractères à l’intérieur d’une deuxième expression de caractères, retournant la position de départ de la première expression si elle est trouvée.

Conventions de la syntaxe Transact-SQL

Syntaxe

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )   

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

expressionToFind
Expression de caractères contenant la séquence à rechercher. expressionToFind a une limite de 8 000 caractères.

expressionToSearch
Expression de caractères à rechercher.

start_location
Expression de type integer ou bigint à laquelle la recherche commence. Si start_location n’est pas spécifiée, a une valeur négative ou est égale à 0, la recherche commence au début de expressionToSearch.

Types de retour

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

Notes

Si l’expression expressionToFind ou expressionToSearch a un type de données Unicode (nchar ou nvarchar) et que ce n’est pas le cas de l’autre expression, la fonction CHARINDEX convertit cette autre expression en un type de données Unicode. Vous ne pouvez pas utiliser CHARINDEX avec les types de données text, ntext ou image.

Si l’expression expressionToFind ou expressionToSearch a une valeur NULL, CHARINDEX retourne NULL.

Si CHARINDEX ne trouve pas expressionToFind dans expressionToSearch, CHARINDEX retourne 0.

CHARINDEX effectue des comparaisons basées sur le classement de l’entrée. Pour effectuer une comparaison dans un classement spécifié, utilisez COLLATE pour appliquer un classement explicite à l’entrée.

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 non dé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 renvoyée comptent les paires de substitution comme s’il s’agissait d’un seul caractère et non de deux. Pour plus d’informations, consultez Prise en charge d’Unicode et du classement.

Exemples

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

Cet exemple recherche bicycle dans la variable avec une valeur de chaîne @document où la recherche est effectuée.

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

Voici le jeu de résultats obtenu.

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

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

L’exemple suivant utilise le paramètre facultatif start_location pour commencer la recherche de vital à partir du cinquième caractère de variable avec une valeur de chaîne @document où la recherche est effectuée.

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

Voici le jeu de résultats obtenu.

-----------   
16            
  
(1 row(s) affected)  

C. Recherche d'une expression inexistante

Cet exemple montre le jeu de résultats quand CHARINDEX ne trouve pas expressionToFind dans expressionToSearch.

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

Voici le jeu de résultats obtenu.

-----------
0
  
(1 row(s) affected)

Cet exemple montre une recherche avec respect de la casse de la chaîne 'TEST' dans 'This is a Test``'.

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

Voici le jeu de résultats obtenu.

-----------
0

Cet exemple montre une recherche avec respect de la casse de la chaîne 'Test' dans 'This is a Test'.

  
USE tempdb;  
GO  
SELECT CHARINDEX ( 'Test',  
       'This is a Test'  
       COLLATE Latin1_General_CS_AS);  

Voici le jeu de résultats obtenu.

-----------
11

Cet exemple montre une recherche sans respect de la casse de la chaîne 'TEST' dans 'This is a Test'.

USE tempdb;  
GO  
SELECT CHARINDEX ( 'TEST',  
       'This is a Test'  
       COLLATE Latin1_General_CI_AS);  
GO  

Voici le jeu de résultats obtenu.

-----------
11

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

F. Recherche à partir du début d’une expression de chaîne

Cet exemple retourne le premier emplacement de la chaîne is dans This is a string, en commençant à la position 1 (le premier caractère) de This is a string.

SELECT CHARINDEX('is', 'This is a string');  

Voici le jeu de résultats obtenu.

---------
3

G. Recherche à partir d’une position autre que la première position

Cet exemple retourne le premier emplacement de la chaîne is dans This is a string, en commençant à la position 4 (le quatrième caractère).

SELECT CHARINDEX('is', 'This is a string', 4);  

Voici le jeu de résultats obtenu.

---------
 6

H. Résultats quand la chaîne est introuvable

Cet exemple montre la valeur de retour quand CHARINDEX ne trouve pas la chaîne string_pattern dans la chaîne où a lieu la recherche.

SELECT TOP(1) CHARINDEX('at', 'This is a string') FROM dbo.DimCustomer;  

Voici le jeu de résultats obtenu.

---------
0

Voir aussi

LEN (Transact-SQL)
PATINDEX (Transact-SQL)
Fonctions de chaîne (Transact-SQL)
+ (Concaténation de chaîne) (Transact-SQL)
Prise en charge d'Unicode et du classement