Megosztás a következőn keresztül:


REGEXP_LIKE (Transact-SQL)

A következőkre vonatkozik: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Database a Microsoft Fabricben

Azt jelzi, hogy a reguláris kifejezésminta egyezik-e egy sztringben.

REGEXP_LIKE
(
    string_expression,
    pattern_expression [ , flags ]
)

REGEXP_LIKE 170-es vagy újabb adatbázis-kompatibilitási szintet igényel. Ha az adatbázis kompatibilitási szintje 170-nél alacsonyabb, REGEXP_LIKE nem érhető el. A többi reguláris kifejezés skaláris függvénye minden kompatibilitási szinten elérhető.

A kompatibilitási szintet a nézetben vagy az sys.databases adatbázis tulajdonságaiban ellenőrizheti. Az adatbázis kompatibilitási szintjét az alábbi paranccsal módosíthatja:

ALTER DATABASE [DatabaseName]
    SET COMPATIBILITY_LEVEL = 170;

Note

A reguláris kifejezések az SQL Server 2025 vagy always-up-todátumfrissítési szabályzattal rendelkező felügyelt Azure SQL-példányban érhetők el.

Arguments

string_expression

Karaktersztring kifejezése.

Lehet állandó, változó vagy karaktersztring oszlopa.

Adattípusok: karakter, nchar, varcharvagy nvarchar.

Note

A REGEXP_LIKE, REGEXP_COUNTés REGEXP_INSTR függvények legfeljebb 2 MB-ig támogatják a LOB-típusokat (varchar(max) és nvarchar(max)) a string_expression paraméterhez.

pattern_expression

Egyező reguláris kifejezésminta. Általában szövegkonstans.

Adattípusok: karakter, nchar, varcharvagy nvarchar. pattern_expression legfeljebb 8000 bájt karakterhosszt támogat.

flags

Egy vagy több karakter, amely megadja az egyezések kereséséhez használt módosítókat. A típus varchar vagy karakter, legfeljebb 30 karakterből áll.

Például ims. Az alapértelmezett érték a c. Ha üres sztring (' ') van megadva, akkor a rendszer az alapértelmezett értékként kezeli ('c'). Adjon meg c vagy bármely más karakterkifejezést. Ha a jelölő több egymásnak ellentmondó karaktert tartalmaz, akkor az SQL Server az utolsó karaktert használja.

Ha például ic a regex megkülönbözteti a kis- és nagybetűket.

Ha az érték Támogatott jelölőértékeklistán felsoroltaktól eltérő karaktert tartalmaz, a lekérdezés az alábbi példához hasonló hibát ad vissza:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Támogatott jelölőértékek
Flag Description
i Kis- és nagybetűk megkülönböztetése (alapértelmezett false)
m Többsoros mód: ^ és $ a kezdő/záró szöveg mellett egyezik a kezdő/záró vonallal (alapértelmezett false)
s Egyezés beállítása .\n (alapértelmezett false)
c Kis- és nagybetűk megkülönböztetése (alapértelmezett true)

Visszaadott érték

Logikai érték. true vagy false.

Remarks

Számosság becslése

A függvény kardinalitás-becslésénekREGEXP_LIKE pontosságának növelése érdekében használjuk a ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP és ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP lekérdezési tippeket az alapértelmezett szelektivitási értékek módosítására. További információ: Lekérdezési tippek.

Ezek a lekérdezési tippek integrálódnak a Cardinality Estimation (CE) visszajelzéssel is. A CE visszacsatolási modell automatikusan azonosítja azokat a lekérdezéseket, amelyek a REGEXP_LIKE függvényt használják, ahol jelentős különbség van a becsült és tényleges sorszám között. Ezután a megfelelő szelektivitási tippet alkalmazza a lekérdezés szintjén a tervminőség manuális bevitel nélkül történő javítása érdekében.

Az automatikus visszajelzési viselkedés letiltásához engedélyezze a nyomkövetési jelző 16268-at.

Examples

Válassz Employees ki minden rekordot a táblázatból, ahol az első név a következő A betűkkel kezdődik és végződik Y:

SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$');

Válasszuk Employees ki az összes rekordot a táblázatból, ahol az első név kezdődik A és végződik Y, kis- és nagybetűs módban:

SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$', 'i');

Válassza ki az összes rekordot abból a Orders táblából, ahol a rendelés dátuma 2020 februárjában van:

SELECT *
FROM Orders
WHERE REGEXP_LIKE (ORDER_DATE, '2020-02-\d\d');

Válassza ki az összes rekordot abból a Products táblából, amelyben a terméknév legalább három egymást követő magánhangzót tartalmaz:

SELECT *
FROM Products
WHERE REGEXP_LIKE (PRODUCT_NAME, '[AEIOU]{3,}');

Készíts egy alkalmazotti táblázatot és CHECK oszlopok korlátaival EmailPhone_Number :

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})$'))
);