PATINDEX (Transact-SQL)PATINDEX (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2008) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Gibt für alle gültigen Text- und Zeichendatentypen die Startposition des ersten Auftretens eines Musters in einem angegebenen Ausdruck zurück bzw. 0, wenn das Muster nicht gefunden wird.Returns the starting position of the first occurrence of a pattern in a specified expression, or zeros if the pattern is not found, on all valid text and character data types.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

PATINDEX ( '%pattern%' , expression )  

ArgumenteArguments

patternpattern
Ein Zeichenausdruck, der die zu suchende Sequenz enthält.Is a character expression that contains the sequence to be found. 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).Wildcard characters can be used; however, the % character must come before and follow pattern (except when you search for first or last characters). pattern ist ein Ausdruck aus der Kategorie der Zeichenfolgen-Datentypen.pattern is an expression of the character string data type category. pattern ist auf 8000 Zeichen beschränkt.pattern is limited to 8000 characters.

expressionexpression
Ein Ausdruck, in der Regel eine Spalte, der nach dem angegebenen Muster durchsucht wird.Is an expression, typically a column that is searched for the specified pattern. expression ist ein Ausdruck aus der Kategorie der Zeichenfolgen-Datentypen.expression is of the character string data type category.

RückgabetypenReturn Types

bigint, wenn expression vom Datentyp varchar(max) oder nvarchar(max) ist; andernfalls int.bigint if expression is of the varchar(max) or nvarchar(max) data types; otherwise int.

RemarksRemarks

Wenn pattern oder expression NULL ist, gibt PATINDEX NULL zurück.If either pattern or expression is NULL, PATINDEX returns NULL.

Die zurückgegebene Startposition ist 1-basiert, nicht 0-basiert.The starting position returned is 1-based, not 0-based.

PATINDEX führt Vergleiche auf Basis der Sortierung der Eingabe aus.PATINDEX performs comparisons based on the collation of the input. Zum Ausführen eines Vergleichs in einer angegebenen Sortierung können Sie mithilfe von COLLATE eine ausdrückliche Sortierung auf die Eingabe anwenden.To perform a comparison in a specified collation, you can use COLLATE to apply an explicit collation to the input.

Ergänzende Zeichen (Ersatzpaare)Supplementary Characters (Surrogate Pairs)

Bei SC-Sortierungen werden UTF-16-Ersatzpaare im expression-Parameter vom Rückgabewert als einzelnes Zeichen gezählt.When using SC collations, the return value will count any UTF-16 surrogate pairs in the expression parameter as a single character. Weitere Informationen finden Sie unter Collation and Unicode Support.For more information, see Collation and Unicode Support.

0x0000 (char(0)) ist ein nicht definiertes Zeichen in Windows-Sortierungen und kann nicht in PATINDEX enthalten sein.0x0000 (char(0)) is an undefined character in Windows collations and cannot be included in PATINDEX.

BeispieleExamples

A.A. Ein einfaches Beispiel für PATINDEXSimple PATINDEX example

Im folgenden Beispiel wird eine kurze Zeichenfolge (interesting data) auf die Startposition der Zeichen ter überprüft.The following example checks a short character string (interesting data) for the starting location of the characters ter.

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

Im Folgenden finden Sie das Resultset.Here is the result set.

3

B.B. Verwenden eines Musters mit PATINDEXUsing a pattern with PATINDEX

Im folgenden Beispiel wird die Position gefunden, an der in einer bestimmten Zeile der ensure-Spalte in der DocumentSummary-Tabelle der AdventureWorks2012AdventureWorks2012-Datenbank das Muster Document beginnt.The following example finds the position at which the pattern ensure starts in a specific row of the DocumentSummary column in the Document table in the AdventureWorks2012AdventureWorks2012 database.

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

Im Folgenden finden Sie das Resultset.Here is the result set.

-----------  
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 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.If you do not restrict the rows to be searched by using a WHERE clause, the query returns all rows in the table and reports nonzero values for those rows in which the pattern was found, and zero for all rows in which the pattern was not found.

C.C. Verwenden von Platzhalterzeichen mit PATINDEXUsing wildcard characters with 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):The following example uses % and _ wildcards to find the position at which the pattern 'en', followed by any one character and 'ure' starts in the specified string (index starts at 1):

SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');  

Im Folgenden finden Sie das Resultset.Here is the result set.

-----------  
8  

PATINDEX funktioniert analog zu LIKE; Sie können daher eines der Platzhalterzeichen verwenden.PATINDEX works just like LIKE, so you can use any of the wildcards. Sie müssen das Muster nicht mit Prozentzeichen umschließen.You do not have to enclose the pattern between percents. PATINDEX('a%', 'abc') gibt 1 und PATINDEX('%a', 'cba') 3 zurück.PATINDEX('a%', 'abc') returns 1 and PATINDEX('%a', 'cba') returns 3.

Im Gegensatz zu LIKE gibt PATINDEX ähnlich wie CHARINDEX eine Position zurück.Unlike LIKE, PATINDEX returns a position, similar to what CHARINDEX does.

D.D. Verwenden von COLLATE mit PATINDEXUsing COLLATE with PATINDEX

Im folgenden Beispiel wird die COLLATE-Funktion verwendet, um die Sortierung des durchsuchten Ausdrucks ausdrücklich anzugeben.The following example uses the COLLATE function to explicitly specify the collation of the expression that is searched.

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

E.E. Verwenden einer Variable, um das Muster anzugebenUsing a variable to specify the pattern

Im folgenden Beispiel wird eine Variable verwendet, um einen Wert an den pattern-Parameter zu übergeben.The following example uses a variable to pass a value to the pattern parameter. In diesem Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.This example uses the AdventureWorks2012AdventureWorks2012 database.

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

Im Folgenden finden Sie das Resultset.Here is the result set.

------------  
22

Weitere InformationenSee Also

LIKE (Transact-SQL) LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)CHARINDEX (Transact-SQL)
LEN (Transact-SQL)LEN (Transact-SQL)
Datentypen (Transact-SQL) Data Types (Transact-SQL)
String Functions (Transact-SQL) (Zeichenfolgenfunktionen (Transact-SQL)) String Functions (Transact-SQL)
(Wildcard - Character(s) to Match) (Transact-SQL) (% (Platzhalterzeichen – zu suchende(s) Zeichen) (Transact-SQL)) (Wildcard - Character(s) to Match) (Transact-SQL)
(Wildcard - Character(s) to Match) (Transact-SQL) (% (Platzhalterzeichen – nicht zu suchende(s) Zeichen) (Transact-SQL)) (Wildcard - Character(s) Not to Match) (Transact-SQL)
_ (Wildcard - Match One Character) (Transact-SQL) (_ (Platzhalterzeichen – einzelnes zu suchendes Zeichen) (Transact-SQL)) _ (Wildcard - Match One Character) (Transact-SQL)
Percent character (Wildcard - Character(s) to Match) (Transact-SQL) (Prozentzeichen (Platzhalterzeichen – zu suchende(s) Zeichen) (Transact-SQL))Percent character (Wildcard - Character(s) to Match) (Transact-SQL)