Partager via


PATINDEX (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison d’analytique SQL dans Microsoft FabricEntrepôt dans Microsoft FabricBase 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