Udostępnij za pośrednictwem


REGEXP_LIKE (Transact-SQL) (wersja zapoznawcza)

Dotyczy: SQL Server 2025 (17.x) (wersja zapoznawcza) Azure SQL Database Azure SQLManaged InstanceSQL Database w wersji zapoznawczej usługi Microsoft Fabric

Note

Jako funkcja w wersji zapoznawczej technologia przedstawiona w tym artykule podlega uzupełniających warunków użytkowania dla wersji zapoznawczych platformy Microsoft Azure.

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 widoku sys.databases 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 skonfigurowanym przy użyciu zasad aktualizacji 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)

Return value

Boolean value. true lub false.

Remarks

Aby zwiększyć dokładność szacowania kardynalności dla REGEXP_LIKE funkcji, możesz użyć ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP wskazówek dotyczących zapytań i ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP , aby dostosować domyślne wartości wyboru. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące zapytań.

Te wskazówki dotyczące zapytań są również zintegrowane z opiniami na temat szacowania kardynalności (CE). Model opinii CE automatycznie identyfikuje zapytania przy użyciu REGEXP_LIKE funkcji, w której istnieje znacząca różnica między szacowanymi i rzeczywistymi liczbami 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ć to automatyczne zachowanie oparte na opiniach, włącz flagę śledzenia 16268.

Examples

Wybierz wszystkie rekordy z tabeli EMPLOYEES, w której imię rozpoczyna się od A i kończy się Y

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

Wybierz wszystkie rekordy z tabeli ORDERS, 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 tabeli PRODUCTS, w której nazwa produktu zawiera co najmniej trzy kolejne śluby

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

Utwórz tabelę employees z ograniczeniami CHECK dla kolumn Email i 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})$'))  
);