Freigeben über


PATINDEX (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Analyseendpunkt in Microsoft FabricLagerhaus in Microsoft FabricSQL-Datenbank in Microsoft Fabric

Gibt die Anfangsposition des ersten Vorkommens eines Musters in einem angegebenen Ausdruck oder null zurück, wenn das Muster nicht gefunden wird, für alle gültigen Text- und Zeichendatentypen.

Transact-SQL-Syntaxkonventionen

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Ein Zeichenausdruck, der die zu findende Sequenz enthält. Wildcard-Charaktere können verwendet werden; Allerdings muss der % Charakter vor dem Muster erscheinen und dem folgen (außer wenn du nach dem ersten oder letzten Zeichen suchst). Pattern ist ein Ausdruck der Datentypkategorie der Zeichenzeichenketten. Das Muster ist auf 8.000 Zeichen begrenzt.

Note

Während herkömmliche reguläre Ausdrücke in SQL Server 2022 (16.x) und früheren Versionen nicht nativ unterstützt werden, können ähnliche komplexe Mustervergleiche mithilfe verschiedener Wildcardausdrücke erreicht werden. Siehe die Dokumentation zu String-Operatoren für weitere Details zur Wildcard-Syntax. Informationen zu regulären Ausdrucksfunktionen in SQL Server 2025 (17.x) finden Sie unter Reguläre Ausdrucksfunktionen.

expression

Ein Ausdruck, typischerweise eine Spalte, die nach dem angegebenen Muster gesucht wird. Der Ausdruck gehört zur Zeichenzeichenketten-Datentyp-Kategorie.

Rückgabetypen

Bigott, wenn die Ausprägung der Varchar(max) - oder nvarchar(max) -Datentypen ist; ansonsten int.

Remarks

Ist Muster , NULLgibt . PATINDEXNULL

Wenn der Ausdruck lautet, NULL wird PATINDEXein Fehler zurückgegeben.

Die Ausgangsposition lautet PATINDEX1.

PATINDEX Führt Vergleiche basierend auf der Sortierung der Eingabe aus. Um einen Vergleich in einer angegebenen Sortierung durchzuführen, können COLLATE Sie eine explizite Sortierung auf die Eingabe anwenden.

Zusatzzeichen (Ersatzpaare)

Wenn Sie Kollationen mit ergänzenden Zeichen (SC) verwenden, zählt der Rückgabewert alle UTF-16-Surrogatpaare im Ausdrucksparameter als ein einzelnes Zeichen. Weitere Informationen finden Sie unter Sortierungs- und Unicode-Support.

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

Examples

A. Einfaches PATINDEX-Beispiel

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

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

Hier sehen Sie das Ergebnis.

position
--------
3

B. Verwenden eines Musters mit PATINDEX

Das folgende Beispiel findet die Stelle, an der das Muster ensure in einer bestimmten Reihe der DocumentSummary Spalte in der Document Tabelle der AdventureWorks2025-Datenbank beginnt.

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

Hier sehen Sie das Ergebnis.

position
--------
64

Wenn Sie die Zeilen nicht einschränken, die mithilfe einer WHERE Klausel durchsucht werden sollen, gibt die Abfrage alle Zeilen in der Tabelle zurück und meldet Nichtzerowerte für die Zeilen, in denen das Muster gefunden wurde, und null für alle Zeilen, in denen das Muster nicht gefunden wurde.

C. Verwenden von Wildcardzeichen 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 PATINDEX('%en_ure%', 'Please ensure the door is locked!') AS position;

Hier sehen Sie das Ergebnis.

position
--------
8

PATINDEX funktioniert analog zu LIKE; Sie können daher eines der Platzhalterzeichen verwenden. Sie müssen das Muster nicht zwischen Prozenten einschließ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 Wildcardausdrücke mit PATINDEX

Das folgende Beispiel verwendet den [^], um die Position eines Zeichens zu bestimmen, das weder eine Zahl, ein Buchstabe noch ein Leerzeichen ist.

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

Hier sehen Sie das Ergebnis.

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 sehen Sie das Ergebnis.

position
--------
9

F. Verwenden einer Variablen zum Angeben des Musters

Das folgende Beispiel verwendet eine Variable, um einen Wert an den Musterparameter zu übergeben. Dieses Beispiel verwendet die AdventureWorks2025-Datenbank.

DECLARE @MyValue AS VARCHAR (10) = 'safety';

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

Hier sehen Sie das Ergebnis.

position
--------
22