Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              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
Returnerar startpositionen för den första förekomsten av ett mönster i ett angivet uttryck, eller noll om mönstret inte hittas, på alla giltiga text- och teckendatatyper.
              
              
              Transact-SQL syntaxkonventioner
Syntax
PATINDEX ( '%pattern%' , expression )
Arguments
pattern
Ett teckenuttryck som innehåller sekvensen som ska hittas. 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
Traditionella reguljära uttryck stöds inte internt i SQL Server 2022 (16.x) och tidigare versioner, men liknande komplex mönstermatchning kan uppnås med hjälp av olika jokerteckenuttryck. See the String operators documentation for more detail on wildcard syntax. Information om reguljära uttrycksfunktioner i SQL Server 2025 (17.x) Förhandsversion finns i Funktioner för reguljära uttryck.
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.
Om uttrycket är NULLreturneras PATINDEX ett fel.
Startpositionen för PATINDEX är 1.
              PATINDEX utför jämförelser baserat på sortering av indata. Om du vill göra en jämförelse i en angiven sortering kan du använda COLLATE för att tillämpa en explicit sortering på indata.
Tilläggstecken (surrogatpar)
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. För mer information, se Sortering och Unicode-stöd.
              0x0000 (char(0)) is an undefined character in Windows collations and can't be included in PATINDEX.
Examples
A. Exempel på grundläggande PATINDEX
I följande exempel kontrolleras en kort teckensträng (interesting data) för startplatsen för tecknen ter.
SELECT PATINDEX('%ter%', 'interesting data') AS position;
Här är resultatet.
position
--------
3
B. Använda ett mönster med PATINDEX
I följande exempel hittar du den position där mönstret ensure börjar på en viss rad DocumentSummary i kolumnen i Document tabellen i databasen AdventureWorks2022.
SELECT PATINDEX('%ensure%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
Här är resultatet.
position
--------
64
Om du inte begränsar de rader som ska genomsökas med hjälp av en WHERE sats returnerar frågan alla rader i tabellen och rapporterar icke-nollvärden för de rader där mönstret hittades och noll för alla rader där mönstret inte hittades.
C. Använda jokertecken med PATINDEX
I följande exempel används % och _ jokertecken för att hitta positionen där mönstret 'en', följt av ett tecken och 'ure' startar i den angivna strängen (index börjar vid 1):
SELECT PATINDEX('%en_ure%', 'Please ensure the door is locked!') AS position;
Här är resultatet.
position
--------
8
              PATINDEX fungerar precis som LIKE, så att du kan använda något av jokertecken. Du behöver inte omsluta mönstret mellan procent. 
              PATINDEX('a%', 'abc') returnerar 1 och PATINDEX('%a', 'cba') returnerar 3.
Till skillnad från LIKEreturnerar PATINDEX en position som liknar vad CHARINDEX som gör.
D. Använda komplexa jokerteckenuttryck med 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;
Här är resultatet.
position
--------
33
E. Använda COLLATE med PATINDEX
I följande exempel används COLLATE funktionen för att uttryckligen ange sortering av det uttryck som söks igenom.
USE tempdb;
GO
SELECT PATINDEX('%ein%', 'Das ist ein Test' COLLATE Latin1_General_BIN);
GO
Här är resultatet.
position
--------
9
F. Använd en variabel för att ange mönstret
The following example uses a variable to pass a value to the pattern parameter. I det här exemplet används databasen AdventureWorks2022.
DECLARE @MyValue AS VARCHAR (10) = 'safety';
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
Här är resultatet.
position
--------
22
Related content
- LIKE (Transact-SQL)
- CHARINDEX (Transact-SQL)
- LEN (Transact-SQL)
- Datatyper (Transact-SQL)
- Strängfunktioner (Transact-SQL)
- [ ] (Jokertecken – tecken som ska matchas) (Transact-SQL)
- [^] (Jokertecken – tecken som inte ska matchas) (Transact-SQL)
- _ (Jokertecken – matcha ett tecken) (Transact-SQL)
- Procenttecken (jokertecken – tecken som ska matchas) (Transact-SQL)