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.
Gäller för: SQL Server 2025 (17.x) Förhandsversion av
Azure SQL Database
Azure SQL Managed Instance
SQL Database i Förhandsversion av Microsoft Fabric
Note
Som en förhandsversionsfunktion omfattas tekniken som presenteras i den här artikeln av kompletterande användningsvillkor för Microsoft Azure Previews.
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_LIKE, REGEXP_COUNToch REGEXP_INSTR stöder LOB-typer (varchar(max) och nvarchar(max)) upp till 2 MB för parametern string_expression .
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 för kardinalitetsuppskattning för REGEXP_LIKE funktionen kan du använda frågetipsen ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP och ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP för att justera standardvärdena för selektivitet. Mer information finns i Frågetips.
Dessa frågetips är också integrerade med feedback om kardinalitetsuppskattning (CE). CE-feedbackmodellen identifierar automatiskt frågor med hjälp av REGEXP_LIKE funktionen 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.
Examples
Markera alla poster i tabellen Employees där förnamnet börjar med A och slutar med Y
SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$');
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');
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,}');
Skapa medarbetartabell med CHECK begränsningar för Email och Phone_Number kolumner:
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})$'))
);