PATINDEX (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Gibt für alle gültigen Text- und Zeichendatentypen die Startposition des ersten Auftretens eines Musters in einem angegebenen Ausdruck zurück bzw. 0 (null), wenn das Muster nicht gefunden wird.

Transact-SQL-Syntaxkonventionen

Syntax

PATINDEX ( '%pattern%' , expression )  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

pattern
Ein Zeichenausdruck, der die zu suchende Sequenz enthält. Platzhalterzeichen können verwendet werden, jedoch muss das %-Zeichen vorangestellt werden und pattern folgen (es sei denn, Sie suchen nach den ersten oder letzten Zeichen). pattern ist ein Ausdruck aus der Kategorie der Zeichenfolgen-Datentypen. pattern ist auf 8000 Zeichen beschränkt.

Hinweis

Obwohl reguläre Ausdrücke in SQL Server nicht nativ unterstützt werden, kann ein ähnlich komplexer Musterabgleich durch Verwendung unterschiedlicher Platzhalterausdrücke erzielt werden. In der Dokumentation zum Zeichenfolgenoperator finden Sie weitere Details zur Platzhaltersyntax.

expression
Ein Ausdruck, in der Regel eine Spalte, der nach dem angegebenen Muster durchsucht wird. expression ist ein Ausdruck aus der Kategorie der Zeichenfolgen-Datentypen.

Rückgabetypen

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

Hinweise

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

Die Startposition für PATINDEX ist 1.

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.

Ergänzende Zeichen (Ersatzpaare)

Bei SC-Sortierungen werden UTF-16-Ersatzpaare im expression-Parameter vom Rückgabewert als einzelnes Zeichen gezählt. Weitere Informationen finden Sie unter Collation and Unicode Support.

0x0000 (char(0)) ist ein nicht definiertes Zeichen in Windows-Sortierungen und kann nicht in PATINDEX enthalten sein.

Beispiele

A. Ein einfaches Beispiel für PATINDEX

Im folgenden Beispiel wird eine kurze Zeichenfolge (interesting data) auf die Startposition der Zeichen ter überprüft.

SELECT position = PATINDEX('%ter%', 'interesting data');  

Hier ist das Resultset.

position
--------
3

B. 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 der AdventureWorks2022-Datenbank das Muster ensure beginnt.

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

Hier ist das Resultset.

position
--------  
64  

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

C. Verwenden von Platzhalterzeichen mit PATINDEX

Im folgenden Beispiel wird mit dem Platzhalterzeichen % und dem Platzhalterzeichen _ nach der Position gesucht, an der das Muster 'en' in der angegebenen Zeichenfolge beginnt und auf das ein beliebiges Zeichen sowie 'ure' folgen (Index beginnt bei 1):

SELECT position = PATINDEX('%en_ure%', 'Please ensure the door is locked!');  

Hier ist das Resultset.

position
--------  
8  

PATINDEX funktioniert analog zu LIKE; Sie können daher eines der Platzhalterzeichen verwenden. Sie müssen das Muster nicht mit Prozentzeichen umschließen. PATINDEX('a%', 'abc') gibt 1 und PATINDEX('%a', 'cba') 3 zurück.

Im Gegensatz zu LIKE gibt PATINDEX ähnlich wie CHARINDEX eine Position zurück.

D: Verwenden komplexer Platzhalterausdrücke mit PATINDEX

Im folgenden Beispiel wird der Zeichenfolgenoperator[^] verwendet, um die Position eines Zeichens zu finden, das keine Zahl, kein Buchstabe oder kein Leerzeichen ist.

SELECT position = PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!'); 

Hier ist das Resultset.

position
--------
33

E. Verwenden von COLLATE mit PATINDEX

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

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

Hier ist das Resultset.

position
--------
9

F. Verwenden einer Variable, um das Muster anzugeben

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

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

Hier ist das Resultset.

position
--------  
22

Weitere Informationen

LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)
LEN (Transact-SQL)
Datentypen (Transact-SQL)
Zeichenfolgenfunktionen (Transact-SQL)
(Platzhalterzeichen – zu suchende(s) Zeichen) (Transact-SQL)
(Platzhalterzeichen – nicht zu suchende(s) Zeichen) (Transact-SQL)
_ (Platzhalterzeichen - einzelnes zu suchendes Zeichen) (Transact-SQL)
Prozentzeichen (Platzhalterzeichen - zu suchende(s) Zeichen) (Transact-SQL)