Udostępnij za pomocą


PATINDEX (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze 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. Można używać postaci dzikich; jednak % postać musi pojawić się przed i podążać za wzorem (z wyjątkiem sytuacji, gdy szukasz znaków pierwszych lub ostatnich). Wzorzec jest wyrażeniem kategorii typu danych ciągu znaków. Pattern jest ograniczony do 8 000 znaków.

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. Zobacz dokumentację operatorów łańcuchowych , aby uzyskać więcej szczegółów na temat składni dzikich kart. Aby uzyskać informacje o funkcjach wyrażeń regularnych w SQL Server 2025 (17.x), zobacz Funkcje wyrażeń regularnych.

expression

Wyrażenie, zazwyczaj kolumna przeszukiwana pod względem określonego wzoru. wyrażenie to kategoria typu danych ciągu znaków.

Typy zwracane

bigint , jeśli wyrażenie jest typami danych varchar(max) lub nvarchar(max); w przeciwnym razie int.

Remarks

Jeśli wzór jest , NULLPATINDEX zwraca 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)

Gdy używasz kolacji ze znakami uzupełniającymi (SC), wartość zwrotna liczy każdą parę zastępczą UTF-16 w parametrze wyrażenia jako pojedynczy znak. Aby uzyskać więcej informacji, zobacz Collation and Unicode support.

0x0000 (char(0)) jest niezdefiniowanym znakiem sortowania systemu Windows i nie można go uwzględnić w pliku 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 wskazuje miejsce, w którym wzór ensure zaczyna się w konkretnym wierszu DocumentSummary kolumny w tabeli Document bazy AdventureWorks2025.

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

Poniższy przykład wykorzystuje [^]operator ciągu do znalezienia pozycji znaku, który nie jest liczbą, literą ani spacją.

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

Poniższy przykład wykorzystuje zmienną do przekazania wartości parametrowi wzorcu . Ten przykład wykorzystuje bazę danych AdventureWorks2025.

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

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

Oto zestaw wyników.

position
--------
22