Delen via


PATINDEX (Transact-SQL)

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric

Retourneert de beginpositie van het eerste exemplaar van een patroon in een opgegeven expressie of nul als het patroon niet wordt gevonden, op alle geldige gegevenstypen voor tekst en tekens.

Transact-SQL syntaxis-conventies

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Een tekenexpressie die de reeks bevat die moet worden gevonden. Wildcard characters can be used; however, the % character must come before and follow pattern (except when you search for first or last characters). pattern is an expression of the character string data type category. pattern is limited to 8,000 characters.

Note

Hoewel traditionele reguliere expressies niet systeemeigen worden ondersteund in SQL Server 2022 (16.x) en eerdere versies, kunnen vergelijkbare complexe patroonkoppelingen worden bereikt met behulp van verschillende jokertekenexpressies. See the String operators documentation for more detail on wildcard syntax. Zie Reguliere expressiefuncties voor informatie over reguliere expressiefuncties in SQL Server 2025 (17.x) Preview.

expression

An expression, typically a column that is searched for the specified pattern. expression is of the character string data type category.

Return types

bigint if expression is of the varchar(max) or nvarchar(max) data types; otherwise int.

Remarks

If pattern is NULL, PATINDEX returns NULL.

Als de expressie is NULL, PATINDEX wordt een fout geretourneerd.

De beginpositie voor PATINDEX is 1.

PATINDEX voert vergelijkingen uit op basis van de sortering van de invoer. Als u een vergelijking in een opgegeven sortering wilt uitvoeren, kunt u een COLLATE expliciete sortering toepassen op de invoer.

Aanvullende tekens (surrogaatparen)

When you use collations with supplementary characters (SC), the return value counts any UTF-16 surrogate pairs in the expression parameter as a single character. Zie Sortering en Unicode-ondersteuningvoor meer informatie.

0x0000 (char(0)) is an undefined character in Windows collations and can't be included in PATINDEX.

Examples

A. Voorbeeld van Eenvoudige PATINDEX

In het volgende voorbeeld wordt een korte tekenreeks (interesting data) gecontroleerd op de beginlocatie van de tekens ter.

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

Hier is het resultatenoverzicht.

position
--------
3

B. Een patroon gebruiken met PATINDEX

In het volgende voorbeeld wordt de positie gevonden waarop het patroon ensure begint in een specifieke rij van de DocumentSummary kolom in de Document tabel in de Database AdventureWorks2022.

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

Hier is het resultatenoverzicht.

position
--------
64

Als u de rijen niet beperkt tot zoeken met behulp van een WHERE component, retourneert de query alle rijen in de tabel en rapporteert niet-nulwaarden voor die rijen waarin het patroon is gevonden en nul voor alle rijen waarin het patroon niet is gevonden.

C. Jokertekens gebruiken met PATINDEX

In het volgende voorbeeld worden % en _ jokertekens gebruikt om de positie te bepalen waarop het patroon 'en'wordt weergegeven, gevolgd door een willekeurig teken en 'ure' begint in de opgegeven tekenreeks (index begint bij 1):

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

Hier is het resultatenoverzicht.

position
--------
8

PATINDEX werkt net als LIKE, zodat u een van de jokertekens kunt gebruiken. U hoeft het patroon niet tussen procenten in te sluiten. PATINDEX('a%', 'abc') retourneert 1 en PATINDEX('%a', 'cba') retourneert 3.

In tegenstelling tot LIKE, PATINDEX retourneert een positie, vergelijkbaar met wat CHARINDEX wel doet.

D. Complexe jokertekenexpressies gebruiken met PATINDEX

The following example uses the [^]string operator to find the position of a character that isn't a number, letter, or space.

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

Hier is het resultatenoverzicht.

position
--------
33

E. COLLATE gebruiken met PATINDEX

In het volgende voorbeeld wordt de COLLATE functie gebruikt om expliciet de sortering op te geven van de expressie die wordt doorzocht.

USE tempdb;
GO

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

Hier is het resultatenoverzicht.

position
--------
9

F. Een variabele gebruiken om het patroon op te geven

The following example uses a variable to pass a value to the pattern parameter. In dit voorbeeld wordt de Database AdventureWorks2022 gebruikt.

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

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

Hier is het resultatenoverzicht.

position
--------
22