PATINDEX (Transact-SQL)

Renvoie la position de début de la première occurrence d'une chaîne dans une expression spécifiée, ou des zéros si la chaîne est introuvable, pour tous les types de données texte et caractère valides. Pour plus d'informations, consultez Critères de recherche spéciaux.

Icône Lien de rubriqueConventions 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).

  • expression
    Expression, en général une colonne dans laquelle est recherché le modèle spécifié. L'argument expression est de type chaîne de caractères.

Types des valeurs renvoyées

Type bigint si expression est de type varchar(max) ou nvarchar(max), sinon int.

Notes

Si pattern ou expression est NULL, PATINDEX retourne NULL.

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.

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

Exemples

A. 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 :

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

Voici l'ensemble des résultats.

-----------

64

(1 row(s) affected)

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.

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

Dans l'exemple suivant, des caractères génériques sont utilisés pour rechercher la position de début du modèle en_ure dans une ligne spécifique de la colonne DocumentSummary de la table Document, où le caractère de soulignement est un caractère générique représentant un caractère quelconque :

USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO

Voici l'ensemble des résultats.

------------

64

(1 row(s) affected)

Si vous ne limitez pas le nombre de lignes à parcourir, la requête renvoie toutes les lignes de la table et fournit des valeurs différentes de zéro pour les lignes contenant le modèle.

C. 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

D. Utilisation d'une variable pour spécifier le paramètre pattern

L'exemple suivant utilise une variable pour passer une valeur au paramètre pattern.

USE AdventureWorks2008R2; 
GO
DECLARE @MyValue varchar(10) = 'safety'; 

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

Voici l'ensemble des résultats.

------------

22