Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Applies to:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL analytics endpoint in Microsoft Fabric
Warehouse 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 LIKE
elementu 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
Related content
- LIKE (Transact-SQL)
- CHARINDEX (Transact-SQL)
- LEN (Transact-SQL)
- Typy danych (Transact-SQL)
- funkcje ciągów (Transact-SQL)
- [ ] (Symbol wieloznaczny — znaki do dopasowania) (Transact-SQL)
- [^] (Symbol wieloznaczny — znaki, które mają być niezgodne) (Transact-SQL)
- _ (Symbol wieloznaczny — dopasuj jeden znak) (Transact-SQL)
- Znak procentu (symbol wieloznaczny — znaki do dopasowania) (Transact-SQL)