Delen via


PATINDEX (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database 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. Jokerkarakters kunnen worden gebruikt; Het % karakter moet echter vóór het patroon komen en volgen (behalve wanneer je zoekt naar het eerste of laatste teken). Patroon is een uitdrukking van de categorie van het type type tekenreeks data. Het patroon is beperkt tot 8.000 tekens.

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. Zie de documentatie van de String operators voor meer details over wildcard-syntaxis. Voor informatie over reguliere expressiefuncties in SQL Server 2025 (17.x), zie Reguliere expressiefuncties.

expression

Een expressie, meestal een kolom die wordt doorzocht naar het opgegeven patroon. expressie is van de categorie karakterstring datatype.

Retourtypen

bigint als de expressie van de varchar(max) of nvarchar(max) datatypes is; Anders int.

Remarks

Als patroon is NULL, geeft . PATINDEXNULL

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)

Wanneer je collaties met aanvullende tekens (SC) gebruikt, telt de returnwaarde alle UTF-16 surrogaatparen in de expressieparameter als één enkel teken. Zie Sortering en Unicode-ondersteuningvoor meer informatie.

0x0000 (char(0)) is een niet-gedefinieerd teken in Windows-sorteringen en kan niet worden opgenomen 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

Het volgende voorbeeld vindt de positie waarop het patroon ensure begint in een specifieke rij van de DocumentSummary kolom in de Document tabel in de AdventureWorks2025-database.

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

Het volgende voorbeeld gebruikt de [^]stringoperator om de positie te vinden van een teken dat geen getal, letter of spatie is.

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

Het volgende voorbeeld gebruikt een variabele om een waarde door te geven aan de patroonparameter . Dit voorbeeld gebruikt de AdventureWorks2025-database.

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

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

Hier is het resultatenoverzicht.

position
--------
22