Udostępnij za pośrednictwem


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

Zwraca pozycję początkową pierwszego wystąpienia wzorca w określonym wyrażeniu lub zero, jeśli wzorzec nie zostanie znaleziony, we wszystkich prawidłowych typach danych tekstowych i znaków.

Transact-SQL konwencje składni

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Wyrażenie znaku zawierające sekwencję do znalezienia. 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

Chociaż tradycyjne wyrażenia regularne nie są natywnie obsługiwane w programie SQL Server 2022 (16.x) i wcześniejszych wersjach, podobne złożone dopasowywanie wzorców można osiągnąć przy użyciu różnych wyrażeń wieloznacznych. See the String operators documentation for more detail on wildcard syntax. Aby uzyskać informacje o funkcjach wyrażeń regularnych w programie SQL Server 2025 (17.x) (wersja zapoznawcza), zobacz Funkcje wyrażeń regularnych.

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.

Jeśli wyrażenie to NULL, PATINDEX zwraca błąd.

Pozycja początkowa dla PATINDEX elementu to 1.

PATINDEX wykonuje porównania na podstawie sortowania danych wejściowych. Aby przeprowadzić porównanie w określonym sortowaniu, można użyć COLLATE polecenia , aby zastosować jawne sortowanie do danych wejściowych.

Znaki dodatkowe (pary zastępcze)

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. Aby uzyskać więcej informacji, zobacz Collation and Unicode support.

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

Examples

A. Przykład podstawowego indeksu PATINDEX

Poniższy przykład sprawdza krótki ciąg znaków (interesting data) dla lokalizacji początkowej znaków ter.

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

Oto zestaw wyników.

position
--------
3

B. Używanie wzorca z indeksem PATINDEX

Poniższy przykład znajduje pozycję, w której wzorzec ensure rozpoczyna się w określonym wierszu DocumentSummary kolumny w tabeli w Document bazie danych AdventureWorks2022.

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

Oto zestaw wyników.

position
--------
64

Jeśli nie ograniczysz przeszukiwania wierszy przy użyciu WHERE klauzuli , zapytanie zwraca wszystkie wiersze w tabeli i zgłasza wartości inne niżzerowe dla tych wierszy, w których znaleziono wzorzec, i zero dla wszystkich wierszy, w których nie znaleziono wzorca.

C. Używanie symboli wieloznacznych z indeksem PATINDEX

W poniższym przykładzie użyto % i _ symboli wieloznacznych w celu znalezienia pozycji, w której wzorzec 'en', po którym następuje dowolny znak i 'ure' rozpoczyna się w określonym ciągu (indeks zaczyna się od 1):

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

Oto zestaw wyników.

position
--------
8

PATINDEX działa podobnie jak LIKE, więc można użyć dowolnych symboli wieloznacznych. Nie musisz ująć wzorca między procentami. PATINDEX('a%', 'abc') Zwraca wartość 1 i PATINDEX('%a', 'cba') zwraca wartość 3.

W przeciwieństwie do LIKEelementu PATINDEX funkcja zwraca pozycję podobną do tego, co CHARINDEX robi.

D. Używanie złożonych wyrażeń wieloznacznych z indeksem 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;

Oto zestaw wyników.

position
--------
33

E. Używanie funkcji COLLATE z indeksem PATINDEX

W poniższym przykładzie użyto COLLATE funkcji , aby jawnie określić sortowanie wyszukiwanego wyrażenia.

USE tempdb;
GO

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

Oto zestaw wyników.

position
--------
9

F. Używanie zmiennej do określania wzorca

The following example uses a variable to pass a value to the pattern parameter. W tym przykładzie użyto bazy danych AdventureWorks2022.

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

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

Oto zestaw wyników.

position
--------
22