PATINDEX (Transact-SQL)

 

**CETTE RUBRIQUE S’APPLIQUE À :** ![](../Image/Applies%20to/yes.png)SQL Server \(à partir de la version 2008\) ![](../Image/Applies%20to/yes.png)Azure SQL Database ![](../Image/Applies%20to/yes.png)Azure SQL Data Warehouse ![](../Image/Applies%20to/yes.png)Parallel Data Warehouse

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

S'applique à : SQL Server (SQL Server 2008 jusqu'à la version actuelle), Base de données Azure SQL.

Topic link icon Conventions de la syntaxe Transact-SQL

  
PATINDEX ( '%pattern%' , expression )  

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.

expression
Est une expression, en général une colonne recherchée pour le modèle spécifié. expression appartient à la catégorie de type de données chaîne de caractères.

bigint si expression est du type de données varchar(max) ou nvarchar(max) ; sinon int.

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.

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 indéfini dans les classements Windows et ne peut pas être inclus dans PATINDEX.

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 dans la base de données AdventureWorks2012.

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

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');  
  

Voici l'ensemble des résultats.

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

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.

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 modèle

L'exemple suivant utilise une variable pour passer une valeur au paramètre pattern. Cet exemple utilise la base de données AdventureWorks2012.

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

Voici l'ensemble des résultats.

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

22

Types de données (Transact-SQL)
Fonctions de chaîne (Transact-SQL)
(Caractère générique - recherche de correspondance de caractère(s)) (Transact-SQL)
(Caractères génériques à ne pas faire correspondre - 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)

Ajouts de la communauté

Afficher: