PATINDEX (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric

Renvoie la position de début de la première occurrence d'un modèle dans une expression spécifiée, ou zéro si le modèle est introuvable, pour tous les types de données texte et caractère valides.

Conventions de la syntaxe Transact-SQL

Syntaxe

PATINDEX ( '%pattern%' , expression )  

Arguments

pattern
Expression de caractères qui contient la séquence à rechercher. Les caractères génériques peuvent être utilisés ; toutefois, le caractère « % » doit précéder et suivre pattern (sauf lorsque vous recherchez les premiers ou derniers caractères). pattern est une expression de la catégorie de type de données chaîne de caractères. pattern est limité à 8 000 caractères.

Notes

Même si les expressions régulières traditionnelles ne sont pas prises en charge en mode natif dans SQL Server, vous pouvez obtenir des critères spéciaux complexes similaires à l’aide de diverses expressions génériques. Pour plus d’informations sur la syntaxe des caractères génériques, consultez la documentation relative aux opérateurs de chaîne.

expression
Expression, en général une colonne dans laquelle le modèle spécifié est recherché. expression est de la catégorie de type de données chaîne de caractères.

Types de retour

bigint si expression est du type varchar(max) ou nvarchar(max) ; sinon, int.

Remarques

Si l’argument pattern ou expression est NULL, PATINDEX retourne NULL.

La position de départ de PATINDEX est 1.

PATINDEX exécute ses comparaisons en se basant 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.

Caractères supplémentaires (paires de substitution)

Lors de l’utilisation de classements SC, la valeur de retour compte toutes les paires de substitution UTF-16 dans le paramètre expression comme un caractère unique. Pour plus d’informations, consultez Prise en charge d’Unicode et du classement.

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

Exemples

R. Exemple simple de la fonction PATINDEX

L’exemple suivant vérifie une courte chaîne de caractères (interesting data) pour trouver l’emplacement de départ des caractères ter.

SELECT position = PATINDEX('%ter%', 'interesting data');  

Voici le jeu de résultats.

position
--------
3

B. Utilisation d'un modèle avec la fonction PATINDEX

L’exemple suivant recherche la position de début du modèle ensure dans une ligne spécifique de la colonne DocumentSummary de la table Document dans la base de données AdventureWorks2022.

SELECT position = PATINDEX('%ensure%',DocumentSummary)  
FROM Production.Document  
WHERE DocumentNode = 0x7B40;  
GO   

Voici le jeu de résultats.

position
--------  
64  

Si vous ne limitez pas le nombre de lignes à explorer à l'aide d'une clause WHERE, la requête renvoie toutes les lignes de la table et fournit des valeurs différentes de 0 pour les lignes contenant le modèle et des valeurs égales à 0 pour toutes les lignes qui ne le contiennent pas.

C. Utilisation de caractères génériques avec la fonction PATINDEX

L'exemple suivant utilise les caractères génériques % et _ pour rechercher la position de début du modèle 'en', suivi de tout caractère et 'ure' dans la chaîne spécifiée (l'index démarre à 1) :

SELECT position = PATINDEX('%en_ure%', 'Please ensure the door is locked!');  

Voici le jeu de résultats.

position
--------  
8  

PATINDEX fonctionne comme LIKE ; vous pouvez donc utiliser chacun des caractères génériques. Il n'est pas nécessaire d'ajouter le modèle entre les pourcentages. PATINDEX('a%', 'abc') retourne 1 et PATINDEX('%a', 'cba') retourne 3.

Contrairement à LIKE, PATINDEX retourne une position, comme le fait CHARINDEX.

D. Utilisation d’expressions génériques complexes avec PATINDEX

L’exemple suivant utilise l’opérateur de chaîne [^] pour rechercher la position d’un caractère qui n’est ni un chiffre, ni une lettre, ni un espace.

SELECT position = PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!'); 

Voici le jeu de résultats.

position
--------
33

E. Utilisation de COLLATE avec PATINDEX

L'exemple qui suit utilise la fonction COLLATE pour spécifier explicitement le classement de l'expression recherchée.

USE tempdb;  
GO  
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;  
GO  

Voici le jeu de résultats.

position
--------
9

F. Utilisation d'une variable pour spécifier le modèle

L’exemple suivant utilise une variable pour transmettre une valeur au paramètre pattern. Cet exemple utilise la base de données AdventureWorks2022.

DECLARE @MyValue VARCHAR(10) = 'safety';   
SELECT position = PATINDEX('%' + @MyValue + '%', DocumentSummary)   
FROM Production.Document  
WHERE DocumentNode = 0x7B40;  

Voici le jeu de résultats.

position
--------  
22

Voir aussi

LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)
LEN (Transact-SQL)
Types de données (Transact-SQL)
Fonctions de chaîne (Transact-SQL)
(Caractère générique - Caractères à rechercher) (Transact-SQL)
(Caractère générique - Caractères à exclure) (Transact-SQL)
_ (Caractère générique - recherche de correspondance d'un seul caractère) (Transact-SQL)
Caractère de pourcentage (caractères génériques à ne pas faire correspondre - Transact-SQL)