Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Point de terminaison d’analytique SQL dans Microsoft Fabric
Entrepôt dans Microsoft Fabric
Base de données SQL dans Microsoft Fabric
Retourne la position de départ de la première occurrence d’un modèle dans une expression spécifiée, ou zéro si le modèle n’est pas trouvé, sur tous les types de données de texte et de caractères valides.
Conventions de la syntaxe Transact-SQL
Syntax
PATINDEX ( '%pattern%' , expression )
Arguments
pattern
Expression de caractère qui contient la séquence à trouver. Des caractères jokers peuvent être utilisés ; cependant, le % caractère doit venir avant et suivre le schéma (sauf lorsque vous cherchez le premier ou le dernier caractère). Le motif est une expression de la catégorie de type de données de la chaîne de caractères. Le motif est limité à 8 000 caractères.
Note
Bien que les expressions régulières traditionnelles ne soient pas prises en charge en mode natif dans SQL Server 2022 (16.x) et les versions antérieures, une correspondance de modèle complexe similaire peut être obtenue à l’aide de diverses expressions génériques. Consultez la documentation des opérateurs de chaînes pour plus de détails sur la syntaxe des wildcards. Pour des informations sur les fonctions d’expression régulière dans SQL Server 2025 (17.x), voir Fonctions d’expressions régulières.
expression
Une expression, typiquement une colonne, qui est recherchée pour le motif spécifié. l’expression appartient à la catégorie de type de données de la chaîne de caractères.
Types de retour
bigint si l’expression est des types de données varchar(max) ou nvarchar(max) ; sinon l’intelligence.
Remarks
Si le motif est NULL, PATINDEX retourne NULL.
Si l’expression est NULL, PATINDEX retourne une erreur.
La position de départ est PATINDEX1.
PATINDEX effectue des comparaisons basées sur le classement de l’entrée. Pour effectuer une comparaison dans un classement spécifié, vous pouvez utiliser COLLATE pour appliquer un classement explicite à l’entrée.
Caractères supplémentaires (paires de substitution)
Lorsque vous utilisez des collations avec des caractères supplémentaires (SC), la valeur de retour compte toutes les paires de substituts UTF-16 dans le paramètre d’expression comme un seul caractère. Pour plus d'informations, consultez Classement et prise en charge Unicode.
0x0000 (char(0)) est un caractère non défini dans les classements Windows, qui n’est pas utilisable avec PATINDEX.
Examples
A. Exemple PATINDEX de base
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 PATINDEX('%ter%', 'interesting data') AS position;
Voici le jeu de résultats.
position
--------
3
B. Utiliser un modèle avec PATINDEX
L’exemple suivant trouve la position à laquelle le motif ensure commence dans une ligne spécifique de la DocumentSummary colonne de la Document table dans la base de données AdventureWorks2025.
SELECT PATINDEX('%ensure%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
Voici le jeu de résultats.
position
--------
64
Si vous ne limitez pas les lignes à rechercher à l’aide d’une WHERE clause, la requête retourne toutes les lignes de la table et signale des valeurs non nulles pour ces lignes dans lesquelles le modèle a été trouvé, et zéro pour toutes les lignes dans lesquelles le modèle n’a pas été trouvé.
C. Utiliser des caractères génériques avec 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 PATINDEX('%en_ure%', 'Please ensure the door is locked!') AS position;
Voici le jeu de résultats.
position
--------
8
PATINDEX fonctionne comme LIKE ; vous pouvez donc utiliser chacun des caractères génériques. Vous n’avez pas besoin de placer le modèle entre des pourcentages.
PATINDEX('a%', 'abc') retourne 1 et PATINDEX('%a', 'cba') retourne 3.
Contrairement à LIKE, PATINDEX retourne une position, comme le fait CHARINDEX.
D. Utiliser des expressions génériques complexes avec PATINDEX
L’exemple suivant utilise [^] chaîne pour trouver la position d’un caractère qui n’est ni un nombre, ni une lettre ni un espace.
SELECT PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!') AS position;
Voici le jeu de résultats.
position
--------
33
E. Utiliser 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. Utiliser une variable pour spécifier le modèle
L’exemple suivant utilise une variable pour transmettre une valeur au paramètre du motif . Cet exemple utilise la base de données AdventureWorks2025.
DECLARE @MyValue AS VARCHAR (10) = 'safety';
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
Voici le jeu de résultats.
position
--------
22
Contenu connexe
- COMME (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 à mettre en correspondance) (Transact-SQL)
- [ ;^] ; (Caractères génériques - caractères à ne pas correspondre) (Transact-SQL)
- _ (Caractère générique - faire correspondre un caractère) (Transact-SQL)
- Caractère de pourcentage (caractères génériques - caractères à mettre en correspondance) (Transact-SQL)