Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2025 (17.x) — предварительная версия
базы данных
SQLAzure Для Управляемого экземпляра
SQL Azureв Microsoft Fabric
Заметка
В качестве предварительной версии технология, представленная в этой статье, подлежит дополнительным условиям использования для предварительных версий Microsoft Azure.
Указывает, соответствует ли шаблон регулярного выражения строке.
REGEXP_LIKE
(
string_expression,
pattern_expression [, flags ]
)
REGEXP_LIKE
требуется уровень совместимости базы данных 170 и более поздней версии. Если уровень совместимости базы данных ниже 170, REGEXP_LIKE
он недоступен. Другие скалярные функции регулярного выражения доступны на всех уровнях совместимости.
Уровень совместимости можно проверить в представлении sys.databases
или в свойствах базы данных. Вы можете изменить уровень совместимости базы данных с помощью следующей команды:
ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 170;
Аргументы
string_expression
Выражение символьной строки.
Может быть константой, переменной или столбцом символьной строки.
Типы данных: char, nchar nchar, varcharили nvarchar nvarchar.
Заметка
REGEXP_LIKE
REGEXP_COUNT
Функции REGEXP_INSTR
и функции поддерживают бизнес-типы (varchar(max) и nvarchar(max)) до 2 МБ для параметра string_expression.
выражение_образца
Шаблон регулярного выражения для сопоставления. Обычно текстовый литерал.
Типы данных: char, nchar nchar, varcharили nvarchar nvarchar. pattern_expression поддерживает максимальную длину символов в 8 000 байт.
флаги
Один или несколько символов, указывающих модификаторы, используемые для поиска совпадений. Тип varchar или charс не более чем 30 символами.
Например, ims
. Значение по умолчанию — c
. Если указана пустая строка (' ')
, она будет рассматриваться как значение по умолчанию ('c')
. Укажите c
или любые другие символьные выражения. Если флаг содержит несколько противоречивых символов, SQL Server использует последний символ.
Например, если указать ic
regex возвращает соответствие регистра.
Если значение содержит символ, отличный от указанных в поддерживаемых значений флагов, запрос возвращает ошибку, как показано в следующем примере:
Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Поддерживаемые значения флагов
Флаг | Описание |
---|---|
i |
Без учета регистра (по умолчанию false ) |
m |
Многострочный режим: ^ и $ сопоставление начальной и конечной строки в дополнение к начальной и конечной строке (по умолчанию false ) |
s |
Разрешить . совпадение \n (по умолчанию false ) |
c |
Учет регистра (по умолчанию true ) |
Возвращаемое значение
Логическое значение.
true
или false
.
Замечания
Чтобы повысить точность оценки кратности для REGEXP_LIKE
функции, можно использовать ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP
подсказки и ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP
подсказки запроса для настройки значений кратности по умолчанию. Дополнительные сведения см. в подсказках к запросам.
Эти указания запросов также интегрированы с отзывом оценки кратности (CE). Модель обратной связи CE автоматически идентифицирует запросы с помощью REGEXP_LIKE
функции, в которой существует значительное различие между предполагаемыми и фактическими числами строк. Затем применяется соответствующее указание селекторности на уровне запроса для повышения качества плана без необходимости ввода вручную.
Чтобы отключить это автоматическое поведение на основе отзывов, включите флаг трассировки 16268.
Примеры
Выберите все записи из таблицы EMPLOYEES
, где первое имя начинается с A
и заканчивается Y
SELECT * FROM EMPLOYEES WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$');
Выберите все записи из таблицы ORDERS
, где дата заказа находится в феврале 2020 года.
SELECT * FROM ORDERS WHERE REGEXP_LIKE (ORDER_DATE, '2020-02-\d\d');
Выберите все записи из таблицы PRODUCTS
, где имя продукта содержит не менее трех последовательных гласных
SELECT * FROM PRODUCTS WHERE REGEXP_LIKE (PRODUCT_NAME, '[AEIOU]{3,}');
Создайте таблицу сотрудников с ограничениями CHECK
для столбцов Email
и 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})$'))
);