Udostępnij za pomocą


REGEXP_LIKE (Transact-SQL)

Dotyczy: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Database w usłudze Microsoft Fabric

Wskazuje, czy wzorzec wyrażenia regularnego jest zgodny z ciągiem.

REGEXP_LIKE
(
    string_expression,
    pattern_expression [ , flags ]
)

REGEXP_LIKE wymaga zgodności bazy danych poziom 170 lub nowszy. Jeśli poziom zgodności bazy danych jest niższy niż 170, REGEXP_LIKE nie jest dostępny. Inne funkcje skalarne wyrażeń regularnych są dostępne na wszystkich poziomach zgodności.

Poziom zgodności można sprawdzić w sys.databases widoku lub we właściwościach bazy danych. Poziom zgodności bazy danych można zmienić za pomocą następującego polecenia:

ALTER DATABASE [DatabaseName]
    SET COMPATIBILITY_LEVEL = 170;

Note

Wyrażenia regularne są dostępne w usłudze Azure SQL Managed Instance z zasadami aktualizacjiprogramu SQL Server 2025 lub Always-up-to-date.

Arguments

string_expression

Wyrażenie ciągu znaków.

Może być stałą, zmienną lub kolumną ciągu znaków.

Typy danych: char, nchar, varcharlub nvarchar.

Note

Funkcje REGEXP_LIKE, REGEXP_COUNTi REGEXP_INSTR obsługują typy LOB (varchar(max) i nvarchar(max)) do 2 MB dla parametru string_expression .

pattern_expression

Wzorzec wyrażenia regularnego do dopasowania. Zazwyczaj literał tekstu.

Typy danych: char, nchar, varcharlub nvarchar. pattern_expression obsługuje maksymalną długość znaków wynoszącą 8000 bajtów.

flags

Co najmniej jeden znak określający modyfikatory używane do wyszukiwania dopasowań. Typem jest varchar lub znak, z maksymalnie 30 znakami.

Na przykład ims. Wartość domyślna to c. Jeśli zostanie podany pusty ciąg (' '), będzie on traktowany jako wartość domyślna ('c'). Podaj c lub inne wyrażenia znaków. Jeśli flaga zawiera wiele sprzecznych znaków, program SQL Server używa ostatniego znaku.

Jeśli na przykład określisz ic regex zwraca dopasowanie uwzględniające wielkość liter.

Jeśli wartość zawiera znak inny niż wymienione na Obsługiwane wartości flagi, zapytanie zwraca błąd podobny do następującego przykładu:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Obsługiwane wartości flagi
Flag Description
i Bez uwzględniania wielkości liter (wartość domyślna false)
m Tryb wielowierszowy: ^ i $ dopasuj wiersz początkowy/końcowy oprócz tekstu rozpoczynającego/końcowego (wartość domyślna false)
s Dopasuj .\n (ustawienie domyślne false)
c Uwzględniana wielkość liter (wartość domyślna true)

Wartość zwracana

Wartość logiczna. true lub false.

Remarks

Szacowanie kardynalności

Aby zwiększyć dokładność oszacowaniaREGEXP_LIKE kardynalności funkcji, użyj ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP wskazówek i ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP zapytania do korekty domyślnych wartości selektywności. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące zapytań.

Te podpowiedzi zapytań integrują się również ze sprzężeniem zwrotnym z estymacji kardynalności (CE). Model informacji zwrotnej CE automatycznie identyfikuje zapytania wykorzystujące REGEXP_LIKE tę funkcję, w których istnieje istotna różnica między szacowaną a faktyczną liczbą wierszy. Następnie stosuje odpowiednią wskazówkę wyboru na poziomie zapytania, aby poprawić jakość planu bez konieczności ręcznego wprowadzania danych wejściowych.

Aby wyłączyć automatyczne zachowanie opinii, włącz flagę śledzenia 16268.

Examples

Wybierz wszystkie rekordy z tabeli, Employees w której imię zaczyna się na A i kończy na Y:

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

Wybierz wszystkie rekordy z tabeli, Employees w której nazwa zaczyna się na A , a kończy na Y, używając trybu nierozróżniającego wielka litera:

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

Wybierz wszystkie rekordy z Orders tabeli, w której data zamówienia przypada w lutym 2020 r.:

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

Zaznacz wszystkie rekordy z Products tabeli, w której nazwa produktu zawiera co najmniej trzy kolejne śluby:

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

Stwórz tabelę pracowników z CHECK ograniczeniami dla kolumn i Phone_NumberEmail

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