PATINDEX (Transact-SQL)

Gibt für alle gültigen Text- und Zeichendatentypen die Startposition des ersten Vorkommens eines Musters in einem angegebenen Ausdruck zurück bzw. 0, wenn das Muster nicht gefunden wird. Weitere Informationen finden Sie unter Mustervergleich in Suchbedingungen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

PATINDEX ( '%pattern%' , expression )

Argumente

  • 'pattern'
    Ein Zeichenausdruck, der die Zeichenfolge enthält, nach der gesucht werden soll. Platzhalterzeichen können verwendet werden. Das Zeichen "%" muss jedoch vor und nach pattern eingegeben werden (außer bei der Suche nach den ersten oder letzten Zeichen).

  • expression
    Ein Ausdruck, normalerweise eine Spalte, die nach dem angegebenen Muster durchsucht wird. expression ist ein Ausdruck mit einem String-Datentyp.

Rückgabetypen

bigint, wenn expression vom Datentyp varchar(max) oder nvarchar(max) ist, andernfalls int.

Hinweise

Wenn pattern oder expression NULL ist, gibt PATINDEX als Ergebnis NULL zurück.

PATINDEX führt Vergleiche auf Basis der Sortierung der Eingabe aus. Zum Ausführen eines Vergleichs in einer angegebenen Sortierung können Sie mithilfe von COLLATE eine ausdrückliche Sortierung auf die Eingabe anwenden.

0x0000 (char(0)) ist ein nicht definiertes Zeichen in Windows-Sortierungen und darf nicht in PATINDEX eingeschlossen werden.

Beispiele

A. Verwenden eines Musters mit PATINDEX

Im folgenden Beispiel wird die Position gefunden, an der in einer bestimmten Zeile der DocumentSummary-Spalte in der Document-Tabelle das Muster ensure beginnt.

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

Dies ist das Resultset.

-----------

64

(1 row(s) affected)

Wenn Sie die zu durchsuchenden Zeilen nicht durch eine WHERE-Klausel beschränken, gibt die Abfrage alle Zeilen in der Tabelle zurück und berichtet Werte ungleich null für die Zeilen, in denen das Muster gefunden wurde, sowie Null für alle Zeilen, in denen das Muster nicht gefunden wurde.

B. Verwenden von Platzhalterzeichen mit PATINDEX

Im folgenden Beispiel werden Platzhalterzeichen zum Suchen der Position verwendet, bei der das Muster en_ure in einer bestimmten Zeile der DocumentSummary-Spalte in der Document-Tabelle beginnt. Der Unterstrich ist hier ein Platzhalter, der für ein beliebiges Zeichen steht.

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

Dies ist das Resultset.

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

64

(1 row(s) affected)

Wenn Sie die zu durchsuchenden Zeilen nicht beschränken, gibt die Abfrage alle Zeilen in der Tabelle zurück und berichtet Werte ungleich null für die Zeilen, in denen das Muster gefunden wurde.

C. Verwenden von COLLATE mit PATINDEX

Im folgenden Beispiel wird die COLLATE-Funktion verwendet, um die Sortierung des durchsuchten Ausdrucks explizit anzugeben.

USE tempdb;
GO
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;
GO

D. Verwenden einer Variable zum Angeben des Musters

Im folgenden Beispiel wird eine Variable verwendet, um einen Wert an den pattern-Parameter zu übergeben.

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

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

Dies ist das Resultset.

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

22