Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL 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})$'))
);