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 de Transact-SQL

Syntaxe

PATINDEX ( '%pattern%' , expression )

Arguments

  • pattern
    Chaîne littérale. Vous pouvez utiliser des caractères génériques ; le caractère % doit cependant précéder et suivre pattern (sauf s'il s'agit de la recherche du premier ou du dernier caractère). pattern est une expression appartenant à la catégorie des types de données chaîne de 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 la valeur de pattern ou de expression est NULL, la fonction PATINDEX renvoie NULL lorsque la base de données a un niveau de compatibilité de 70. Si ce niveau est de 65 ou antérieur, la fonction PATINDEX ne renvoie NULL que si les deux arguments, pattern et expression affichent la valeur 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.

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 AdventureWorks;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
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 AdventureWorks;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
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