CHARINDEX (Transact-SQL)
S’applique à : point de terminaison d’analytique SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL Analytics dans Microsoft Fabric Warehouse 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 la Documentation sur les versions antérieures.
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)
D. Recherche respectant la casse
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
E. Recherche ne respectant pas la casse
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