Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2025 (17.x)
Azure SQL Database Azure SQL
Managed Instance
SQL Database v Microsoft Fabric
Určuje, jestli vzor regulárního výrazu odpovídá v řetězci.
REGEXP_LIKE
(
string_expression,
pattern_expression [ , flags ]
)
REGEXP_LIKE vyžaduje úroveň kompatibility databáze 170 a vyšší. Pokud je úroveň kompatibility databáze nižší než 170, REGEXP_LIKE není dostupná. Další skalární funkce regulárních výrazů jsou k dispozici na všech úrovních kompatibility.
Úroveň kompatibility sys.databases můžete zkontrolovat v zobrazení nebo ve vlastnostech databáze. Úroveň kompatibility databáze můžete změnit pomocí následujícího příkazu:
ALTER DATABASE [DatabaseName]
SET COMPATIBILITY_LEVEL = 170;
Note
Regulární výrazy jsou k dispozici ve službě Azure SQL Managed Instance se zásadami aktualizaceSQL Serveru 2025 nebo Always-up-to-date.
Arguments
string_expression
Výraz řetězce znaků.
Může to být konstanta, proměnná nebo sloupec řetězce znaků.
Datové typy: char, nchar, varcharnebo nvarchar.
Note
Funkce REGEXP_LIKEa , REGEXP_COUNTREGEXP_INSTR podporují typy LOB (varchar(max) a nvarchar(max)) až 2 MB pro string_expression parametr.
pattern_expression
Vzor regulárního výrazu, který se má shodovat. Obvykle textový literál.
Datové typy: char, nchar, varcharnebo nvarchar. pattern_expression podporuje maximální délku znaků 8 000 bajtů.
flags
Jeden nebo více znaků, které určují modifikátory používané k hledání shod. Typ je varchar nebo znak, s maximálně 30 znaky.
Například ims. Výchozí hodnota je c. Pokud je zadaný prázdný řetězec (' '), bude považován za výchozí hodnotu ('c'). Zadejte c nebo jiné výrazy znaků. Pokud příznak obsahuje více protichůdných znaků, sql Server použije poslední znak.
Pokud například zadáte ic regulární výraz vrátí porovnávání s rozlišováním velkých a malých písmen.
Pokud hodnota obsahuje jiný znak než ty uvedené v podporované hodnoty příznaku, dotaz vrátí chybu jako v následujícím příkladu:
Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Podporované hodnoty příznaku
| Flag | Description |
|---|---|
i |
Nerozlišují se malá a velká písmena (výchozí false) |
m |
Režim více řádků: ^ a $ porovná počáteční/koncový řádek kromě počátečního/koncového textu (výchozí false) |
s |
Nechte . odpovídat \n (výchozí false) |
c |
Malá a velká písmena (výchozí true) |
Návratová hodnota
Logická hodnota
true nebo false.
Remarks
Odhad kardinalita
Pro zvýšení přesnosti odhaduREGEXP_LIKE kardinálnosti pro funkci použijte ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP hint a ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP dotaz k úpravě výchozích hodnot selektivity. Další informace najdete v tématu nápovědy k dotazům.
Tyto dotazové nápovědy se také integrují se zpětnou vazbou z odhadu kardinality (CE). CE zpětná vazba automaticky identifikuje dotazy, které funkci používají REGEXP_LIKE , kde je významný rozdíl mezi odhadovaným a skutečným počtem řádků. Potom použije odpovídající tip selektivity na úrovni dotazu, aby se zlepšila kvalita plánu bez nutnosti ručního vstupu.
Pokud chcete chování automatické zpětné vazby zakázat, povolte příznak trasování 16268.
Examples
Vyberte všechny záznamy z tabulky Employees , kde křestní jméno začíná a končí na AY:
SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$');
Vyberte všechny záznamy z tabulky Employees , kde křestní jméno začíná a končí na AY, pomocí režimu bez rozlišení velkých písmen:
SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$', 'i');
Vyberte všechny záznamy z Orders tabulky, ve které je datum objednávky v únoru 2020:
SELECT *
FROM Orders
WHERE REGEXP_LIKE (ORDER_DATE, '2020-02-\d\d');
Vyberte všechny záznamy z Products tabulky, kde název produktu obsahuje alespoň tři po sobě jdoucí samohlásky:
SELECT *
FROM Products
WHERE REGEXP_LIKE (PRODUCT_NAME, '[AEIOU]{3,}');
Vytvořte tabulku zaměstnanců s CHECK omezeními pro Email sloupce a Phone_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})$'))
);