Kommentar
Å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.
Gäller för: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database i Microsoft Fabric
Anger om mönster för reguljära uttryck matchar i en sträng.
REGEXP_LIKE
(
string_expression,
pattern_expression [ , flags ]
)
REGEXP_LIKE kräver databaskompatibilitetsnivå 170 och senare. Om databasens kompatibilitetsnivå är lägre än 170 REGEXP_LIKE är den inte tillgänglig. Andra skalärfunktioner för reguljära uttryck är tillgängliga på alla kompatibilitetsnivåer.
Du kan kontrollera kompatibilitetsnivån i sys.databases vyn eller i databasegenskaperna. Du kan ändra kompatibilitetsnivån för en databas med följande kommando:
ALTER DATABASE [DatabaseName]
SET COMPATIBILITY_LEVEL = 170;
Note
Reguljära uttryck är tillgängliga i Azure SQL Managed Instance med sql Server 2025- eller always-up-to-date update-principen.
Arguments
string_expression
Ett uttryck för en teckensträng.
Kan vara en konstant, variabel eller kolumn med teckensträng.
Datatyper: char, nchar, varchareller nvarchar.
Note
Funktionerna REGEXP_* stöder LOB-typer (varchar(max) och nvarchar(max)) upp till 2 MB för string_expression-parametern.
pattern_expression
Mönster för reguljära uttryck som ska matchas. Vanligtvis en textliteral.
Datatyper: char, nchar, varchareller nvarchar. pattern_expression stöder en maximal teckenlängd på 8 000 byte.
flags
Ett eller flera tecken som anger de modifierare som används för att söka efter matchningar. Typen är varchar eller tecken, med högst 30 tecken.
Till exempel ims. Standardvärdet är c. Om en tom sträng (' ') anges behandlas den som standardvärdet ('c'). Ange c eller andra teckenuttryck. Om flaggan innehåller flera motstridiga tecken använder SQL Server det sista tecknet.
Om du till exempel anger ic returnerar regex skiftlägeskänslig matchning.
Om värdet innehåller ett annat tecken än de som anges i flagga som stödsreturnerar frågan ett fel som liknar följande exempel:
Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Flaggvärden som stöds
| Flag | Description |
|---|---|
i |
Skiftlägesokänsligt (standard false) |
m |
Flerradsläge: ^ och $ matcha start-/slutlinje utöver start-/sluttext (standard false) |
s |
Låt . matcha \n (standard false) |
c |
Skiftlägeskänsligt (standard true) |
Returvärde
Booleskt värde.
true eller false.
Remarks
Kardinalitetsuppskattning
För att förbättra noggrannheten i kardinalitetsuppskattning för REGEXP_LIKE funktionen, använd ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP och ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP frågeledtrådarna för att justera standardvärdena för selektivitet. Mer information finns i Frågetips.
Dessa frågeledtrådar integreras också med återkoppling från kardinalitetsskattning (CE). CE-återkopplingsmodellen identifierar automatiskt frågor som använder funktionen REGEXP_LIKE där det finns en betydande skillnad mellan uppskattade och faktiska radantal. Den tillämpar sedan lämplig selektivitetstips på frågenivå för att förbättra planens kvalitet utan att kräva manuella indata.
Om du vill inaktivera det automatiska feedbackbeteendet aktiverar du spårningsflagga 16268.
SARGable-mönsterstöd
REGEXP_LIKE är SARG-bar endast när mönstret börjar med ankaret ^. Dessutom kan det förankrade mönstret inkludera:
- En kvantifikator:
*,+, ,?,{n},{n,}, eller{n,m}. Till exempel^ab+eller^ab*. - Intervalltecken, såsom
[0-9A-Za-z].
För att undkomma en metakaraktär, använd backslash (\).
Dessa villkor gör att frågeoptimeraren använder indexsökningsoperationer för att förbättra frågeprestandan.
Reguljära uttryck respekterar inte kollationsregler. Deras beteende kan skilja sig från andra strängjämförelsefunktioner, såsom LIKE. Denna skillnad är mest viktig på indexerade kolumner som har språkspecifika sorteringar.
I turkisk sortering behandlas till exempel tecknen i och I tydligt även i skiftlägesokänslig sortering på grund av språkspecifika regler. För mer information, se exempel F. Jämför SARGbar och icke-SARGbar mönstermatchning med turkisk kollation.
Note
Termen SARGable i relationsdatabaser refererar till ett Search ARGumentable-predikat som kan använda ett index för att påskynda exekveringen av SQL-frågan. Mer information finns i arkitektur och designguide för SQL Server- och Azure SQL-index.
Examples
A. Matcha värden som börjar och slutar med specifika karaktärer
Välj alla poster från Employees tabellen där förnamnet börjar med A och slutar på Y:
SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$');
B. Utför en kasus-insensitiv mönstermatchning
Välj alla poster från Employees tabellen där förnamnet börjar med A och slutar på Y, med användning av kasuskänsligt läge:
SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$', 'i');
C. Matchningsdatum med ett mönster av reguljära uttryck
Välj alla poster i tabellen Orders där orderdatumet är i februari 2020:
SELECT *
FROM Orders
WHERE REGEXP_LIKE (ORDER_DATE, '2020-02-\d\d');
D. Matcha upprepade karaktärsmönster
Markera alla poster i tabellen Products där produktnamnet innehåller minst tre på varandra följande vokaler:
SELECT *
FROM Products
WHERE REGEXP_LIKE (PRODUCT_NAME, '[AEIOU]{3,}');
E. Upprätthåll datavalidering med CHECK-begränsningar
Skapa en employees-tabell med CHECK begränsningar för Email och Phone_Number kolumnerna:
DROP TABLE IF EXISTS Employees;
CREATE TABLE Employees
(
ID INT IDENTITY (101, 1),
[Name] VARCHAR (150),
Email VARCHAR (320)
CHECK (REGEXP_LIKE (Email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')),
Phone_Number NVARCHAR (20)
CHECK (REGEXP_LIKE (Phone_Number, '^(\d{3})-(\d{3})-(\d{4})$'))
);
F. Jämför mönstermatchning som kan användas för SARGbar och icke-SARGbar med turkisk sortering
Detta exempel visar SARGbar och icke-SARGbar användning av REGEXP_LIKE funktionen med turkisk sortering.
-- Create a temporary table with Turkish collation and and an index
CREATE TABLE #Users
(
Username NVARCHAR (100) COLLATE Turkish_100_CI_AS_SC_UTF8 NOT NULL,
INDEX idx_username (Username)
);
-- Insert sample data
INSERT INTO #Users (Username)
VALUES (N'i'), -- lowercase i
(N'I'), -- uppercase dotless I
(N'İ'), -- uppercase dotted İ
(N'abc');
-- SARGable pattern: starts with ^ and uses quantifier
-- This will use index seek if applicable, but REGEXP_LIKE ignores collation
-- So 'i' and 'I' are treated as different characters
SELECT 'SARGable' AS PatternType,
*
FROM #Users
WHERE REGEXP_LIKE (Username, '^i');
-- Non-SARGable pattern: does not start with ^.
-- REGEXP_LIKE performs full scan, and matches are
-- case-insensitive since 'i' flag is supplied,
-- so both 'i' and 'I' match.
SELECT 'Non-SARGable' AS PatternType,
*
FROM #Users
WHERE REGEXP_LIKE (Username, 'i', 'i');
-- Cleanup
DROP TABLE #Users;