Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza 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
Treści powiązane
- JAK (Transact-SQL)
- INDEKS CHAR (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)