Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL 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_* függvények támogatják az LOB típusokat (varchar(max) és nvarchar(max)) akár 2 MB-ig 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.
SARGable mintatámogatás
REGEXP_LIKE csak akkor SARGozható , ha a minta a horgonysal ^kezdődik. Ezen felül a rögzített minta tartalmazhatja:
- Egy kvantifikátor:
*,+,?,{n}{n,}, vagy{n,m}. Például,^ab+vagy^ab*. - Távolsági karakterek, például
[0-9A-Za-z].
Egy metakarakter elől való elmeneküléshez használd a visszavágást (\).
Ezek a feltételek lehetővé teszik a lekérdezésoptimalizáló számára, hogy indexkereső műveleteket használjon a lekérdezések teljesítményének javítására.
A reguláris kifejezések nem tartják tiszteletben a kocolási szabályokat. Viselkedésük eltérhet más húrösszehasonlító függvényektől, például LIKE. Ez a különbség leginkább olyan indexelt oszlopoknál jelentkezik, amelyek nyelvspecifikus összeállításokat tartalmaznak.
A török rendezésben például a karaktereket i a nyelvspecifikus szabályok miatt a kis- és I nagybetűk megkülönböztetése esetén is külön kezelik. További információért lásd F példát. Hasonlítsa össze a SARGable és nem-SARGable minták párosítását a török összeállítással.
Note
A relációs adatbázisokban a SARGable kifejezés olyan Search ARGumentable predikátumot jelöl, amely indexet használhat a lekérdezés végrehajtásának felgyorsítására. További információ: SQL Server és Azure SQL indexarchitektúra és tervezési útmutató.
Examples
A. Olyan értékek, amelyek bizonyos karakterekkel kezdődnek és végződnek
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$');
B. Végezz egy kis- és kozik-érzékeny mintápárosítást
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');
C. Egyeztetési dátumok reguláris kifejezési mintával
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');
D. Ismételt karakterminták egyeztetése
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,}');
E. Kényszerítsd be az adatellenőrzést CHECK korlátozásokkal
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})$'))
);
F. Hasonlítsd össze a SARGable és a nem SARGable minták párosítását a török összeállítással
Ez a példa a SARGable és nem SARGable REGEXP_LIKE funkció használatát mutatja a török kollektálással.
-- 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;