Megosztás a következőn keresztül:


PATINDEX (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Egy minta első előfordulásának kezdő pozícióját adja vissza egy adott kifejezésben, vagy nullát, ha a minta nem található, az összes érvényes szöveg- és karakteradattípuson.

Transact-SQL szintaxis konvenciók

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

A megtalálandó sorozatot tartalmazó karakterkifejezés. Wildcard karakterek is használhatók; azonban a % karakternek előre kell jönnie és követnie kell a mintát (kivéve, ha az első vagy utolsó karaktereket keresed). a minta a karakterlánc adattípus kategória kifejezése. a mintázat 8 000 karakterre korlátozott.

Note

Bár az SQL Server 2022 (16.x) és a korábbi verziók nem támogatják natív módon a hagyományos reguláris kifejezéseket, hasonló összetett mintaegyeztetés érhető el különböző helyettesítő karakterek használatával. A vakkkártyák szintaxisáról további részletekért lásd a String operátorok dokumentációját. Az SQL Server 2025 (17.x) reguláris kifejezési függvényeiről információért lásd: Regular expressions functions.

expression

Egy kifejezés, általában egy oszlop, amelyet a megadott mintára keresnek. az expression a karakterlánc adattípus kategóriájába tartozik.

Visszatérési típusok

bigint, ha az kifejezésa varchar(max) vagy nvarchar(max) adattípusokhoz tartozik; egyébként int.

Remarks

Ha a NULL , PATINDEX akkor akkor -t ad.NULL

Ha a kifejezés az NULL, PATINDEX hibát ad vissza.

A kezdő pozíció PATINDEX a következő 1: .

PATINDEX a bemenet rendezése alapján végez összehasonlításokat. Ha egy adott rendezésben szeretne összehasonlítást végezni, explicit rendezést alkalmazhat COLLATE a bemenetre.

Kiegészítő karakterek (helyettesítő párok)

Amikor kiegészítő karakterekkel (SC) rendelkező összeállításokat használunk, a visszaküldési érték az expresszion paraméterben szereplő UTF-16 helyettesítő párt egyetlen karakterként számolja. További információ: összehasonlítási szabályok és Unicode-támogatás.

0x0000 A (char(0)) a Windows-rendezésekben nem definiált karakter, és nem szerepelhet a fájlban PATINDEX.

Examples

A. Egyszerű PATINDEX-példa

Az alábbi példa egy rövid karaktersorozatot (interesting data) ellenőriz a karakterek terkezdőhelyén.

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

Itt van az eredmények összessége.

position
--------
3

B. Minta használata a PATINDEX használatával

Az alábbi példa megtalálja a ensure minta elinduló pozícióját az AdventureWorks2025 adatbázis táblázatának oszlopának egy adott sorában DocumentSummaryDocument .

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

Itt van az eredmények összessége.

position
--------
64

Ha nem korlátozza a keresendő sorokat záradékkal WHERE , a lekérdezés a tábla összes sorát visszaadja, és nemero értékeket jelent azokra a sorokra vonatkozóan, amelyekben a minta található, és nullát az összes olyan sorra, amelyben a minta nem található.

C. Helyettesítő karakterek használata a PATINDEX használatával

Az alábbi példa % és _ helyettesítő karaktereket használ annak a pozíciónak a megkereséséhez, ahol a minta 'en', amelyet egy karakter követ, és 'ure' a megadott sztringben indul el (az index 1-nél kezdődik):

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

Itt van az eredmények összessége.

position
--------
8

PATINDEX ugyanúgy működik, hogy LIKEbármelyik helyettesítő karaktert használni tudja. Nem kell a százalékok közötti mintát belefoglalnia. PATINDEX('a%', 'abc') 1 értéket ad vissza, és PATINDEX('%a', 'cba') 3-at ad vissza.

Ellentétben LIKE, PATINDEX ad vissza egy pozíciót, hasonló, mint amit CHARINDEX csinál.

D. Összetett helyettesítő karakterek használata a PATINDEX használatával

A következő példa a [^]string operátort használja arra, hogy megtalálja annak a karakternek a pozícióját, amely nem szám, betű vagy szóköz.

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

Itt van az eredmények összessége.

position
--------
33

E. A COLLATE és a PATINDEX használata

Az alábbi példa a COLLATE függvény használatával adja meg a keresett kifejezés rendezési módját.

USE tempdb;
GO

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

Itt van az eredmények összessége.

position
--------
9

F. Változó használata a minta megadásához

A következő példa egy változót használ, hogy egy értéket továbbítson a mintaparaméternek . Ez a példa az AdventureWorks2025 adatbázist használja.

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

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

Itt van az eredmények összessége.

position
--------
22