Partilhar via


REGEXP_LIKE (Transact-SQL)

Aplica-se a: SQL Server 2025 (17.x) Azure SQL Database AzureSQL Managed InstanceSQL database in Microsoft Fabric

Indica se o padrão de expressão regular corresponde em uma cadeia de caracteres.

REGEXP_LIKE
(
    string_expression,
    pattern_expression [ , flags ]
)

REGEXP_LIKE requer compatibilidade de banco de dados nível 170 e superior. Se o nível de compatibilidade do banco de dados for inferior a 170, REGEXP_LIKE não estará disponível. Outras funções escalares de expressão regular estão disponíveis em todos os níveis de compatibilidade.

Você pode verificar o nível de compatibilidade na exibição ou nas propriedades do sys.databases banco de dados. Você pode alterar o nível de compatibilidade de um banco de dados com o seguinte comando:

ALTER DATABASE [DatabaseName]
    SET COMPATIBILITY_LEVEL = 170;

Note

As expressões regulares estão disponíveis na Instância Gerenciada SQL do Azure com a política de atualizaçãoSQL Server 2025 ou Always-up-to-date.

Arguments

string_expression

Uma expressão de uma cadeia de caracteres.

Pode ser uma constante, variável ou coluna de cadeia de caracteres.

Tipos de dados: char, nchar, varcharou nvarchar.

Note

As REGEXP_LIKEfunções , REGEXP_COUNTe REGEXP_INSTR suportam tipos de LOB (varchar(max) e nvarchar(max)) até 2 MB para o parâmetro string_expression .

pattern_expression

Padrão de expressão regular a ser correspondido. Geralmente um texto literal.

Tipos de dados: char, nchar, varcharou nvarchar. pattern_expression suporta um comprimento máximo de caracteres de 8.000 bytes.

flags

Um ou mais caracteres que especificam os modificadores usados para pesquisar correspondências. Type é varchar ou char, com um máximo de 30 caracteres.

Por exemplo, ims. O padrão é c. Se uma (' ') de cadeia de caracteres vazia for fornecida, ela será tratada como o valor padrão ('c'). Forneça c ou quaisquer outras expressões de caracteres. Se o sinalizador contiver vários caracteres contraditórios, o SQL Server usará o último caractere.

Por exemplo, se você especificar ic o regex retornará a correspondência que diferencia maiúsculas de minúsculas.

Se o valor contiver um caractere diferente daqueles listados em valores de sinalizador suportados, a consulta retornará um erro como o exemplo a seguir:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Valores de sinalizador suportados
Flag Description
i Não diferencia maiúsculas de minúsculas (padrão false)
m Modo multi-linha: e ^ corresponder a linha de início/fim, $ além do texto de início/fim (padrãofalse)
s Deixar . corresponder \n (padrão false)
c Diferencia maiúsculas de minúsculas (padrão true)

Valor de retorno

Valor booleano. true ou false.

Remarks

Estimativa da cardinalidade

Para aumentar a precisão da estimativa de cardinalidade da REGEXP_LIKE função, utilize as ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP dicas e ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP query para ajustar os valores de seletividade por defeito. Para obter mais informações, consulte Dicas de consulta.

Estas dicas de consulta também se integram com o feedback de estimativa de cardinalidade (CE). O modelo de feedback CE identifica automaticamente consultas que utilizam a REGEXP_LIKE função onde há uma diferença significativa entre o número estimado e o número real de linhas. Em seguida, ele aplica a dica de seletividade apropriada no nível de consulta para melhorar a qualidade do plano sem exigir entrada manual.

Para desativar o comportamento de feedback automático, ative o sinalizador de rastreamento 16268.

Examples

Selecione todos os registos da Employees tabela onde o primeiro nome começa A e termina com Y:

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

Selecione todos os registos da Employees tabela onde o primeiro nome começa A e termina em Y, usando o modo insensível a maiúsculas e minúsculas:

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

Selecione todos os registros na tabela onde a Orders data do pedido é em fevereiro de 2020:

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

Selecione todos os registros na Products tabela em que o nome do produto contém pelo menos três vogais consecutivas:

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

Crie uma tabela de colaboradores com CHECK restrições para as Email colunas e 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})$'))
);