Sdílet prostřednictvím


PATINDEX (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Vrátí počáteční pozici prvního výskytu vzoru v zadaném výrazu nebo nulu, pokud se vzor nenajde, u všech platných textových a znakových datových typů.

Transact-SQL konvence syntaxe

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Znakový výraz, který obsahuje sekvenci, která se má najít. Lze použít žolíkové znaky; nicméně % postava musí být před a následovat vzor (kromě hledání prvního nebo posledního znaku). pattern je výraz kategorie datového typu znakového řetězce. Pattern je omezen na 8 000 znaků.

Note

Tradiční regulární výrazy nejsou nativně podporovány v SQL Serveru 2022 (16.x) a starších verzích, ale podobné komplexní porovnávání vzorů lze dosáhnout pomocí různých výrazů se zástupnými znaky. Pro podrobnější informace o syntaxi divokých znaků viz dokumentace operátorů řetězců . Pro informace o regulárních výrazových funkcích v SQL Server 2025 (17.x) viz Regulární výrazy funkce.

expression

Výraz, obvykle sloupec, který se hledá pro zadaný vzor. výraz je kategorie datového typu znakového řetězce.

Návratové typy

bigint , pokud je výraz pro datové typy varchar(max) nebo nvarchar(max ); jinak int.

Remarks

Pokud je vzor , NULLPATINDEX vrací NULL.

Pokud je NULLvýraz , PATINDEX vrátí chybu.

Počáteční pozice je PATINDEX1.

PATINDEX provádí porovnání na základě kolace vstupu. Chcete-li provést porovnání v zadané kolaci, můžete použít COLLATE explicitní kolaci na vstup.

Doplňkové znaky (náhradní dvojice)

Když použijete kolace s doplňkovými znaky (SC), hodnota return počítá všechny UTF-16 náhradní páry v parametru výrazu jako jeden znak. Další informace najdete v tématu podpora kolace a kódování Unicode.

0x0000 (char(0)) je nedefinovaný znak v kolacích Systému Windows a nelze jej zahrnout do PATINDEX.

Examples

A. Základní příklad PATINDEX

Následující příklad zkontroluje krátký znak řetězec (interesting data) pro počáteční umístění znaků ter.

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

Tady je soubor výsledků.

position
--------
3

B. Použití vzoru s PATINDEX

Následující příklad najde pozici, kde vzor ensure začíná, v konkrétním řádku sloupce DocumentSummary tabulky Document v databázi AdventureWorks2025.

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

Tady je soubor výsledků.

position
--------
64

Pokud neomezíte prohledání řádků pomocí WHERE klauzule, dotaz vrátí všechny řádky v tabulce a hlásí nenulové hodnoty pro tyto řádky, ve kterých byl vzor nalezen, a nula pro všechny řádky, ve kterých se vzor nenašel.

C. Použití zástupných znaků s PATINDEX

Následující příklad používá % a _ zástupné znaky k nalezení pozice, ve které vzor 'en', následovaný libovolným znakem a 'ure' začíná v zadaném řetězci (index začíná na 1):

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

Tady je soubor výsledků.

position
--------
8

PATINDEX funguje stejně jako LIKE, takže můžete použít kterýkoli ze zástupných znaků. Vzor mezi procenty nemusíte uzavřít. PATINDEX('a%', 'abc') vrátí hodnotu 1 a PATINDEX('%a', 'cba') vrátí hodnotu 3.

Na rozdíl od LIKEfunkce vrátí PATINDEX pozici, která se podobá tomu, co CHARINDEX dělá.

D. Použití složitých zástupných výrazů s PATINDEX

Následující příklad používá [^]operátor řetězce k nalezení pozice znaku, který není číslem, písmenem nebo mezerou.

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

Tady je soubor výsledků.

position
--------
33

E. Použití funkce COLLATE s patindexem

Následující příklad používá COLLATE funkci k explicitní určení kolace hledaného výrazu.

USE tempdb;
GO

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

Tady je soubor výsledků.

position
--------
9

F. Určení vzoru pomocí proměnné

Následující příklad používá proměnnou k předání hodnoty parametru pattern . Tento příklad využívá databázi AdventureWorks2025.

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

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

Tady je soubor výsledků.

position
--------
22