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 obtenu.
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 obtenu.
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 obtenu.
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 obtenu.
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 obtenu.
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 obtenu.
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)