REGEXP_LIKE (Transact-SQL)

Aplica-se a: SQL Server 2025 (17.x) Banco de Dados SQL do AzurePonto de extremidade de análise deSQL da Instância Gerenciada de SQL do Azureno Microsoft Fabric e Warehouse noBanco de Dados SQL do Microsoft Fabric no Microsoft Fabric

A REGEXP_LIKE função escalar de expressão regular indica se o padrão de expressão regular corresponde em uma cadeia.

REGEXP_LIKE
(
    string_expression,
    pattern_expression [ , flags ]
)

Você pode verificar o nível de compatibilidade na sys.databases exibição ou nas propriedades do 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;

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_* funções suportam tipos LOB (varchar(max) e nvarchar(max)) de até 2 MB para o parâmetro string_expression .

pattern_expression

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

Tipos de dados: char, nchar, varcharou nvarchar. pattern_expression dá suporte a um comprimento máximo de caractere de 8.000 bytes.

flags

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

Por exemplo, ims. O padrão é c. Se uma cadeia de caracteres vazia (' ') for fornecida, ela será tratada como o valor padrão ('c'). Forneça c ou qualquer outra expressão de caractere. 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á correspondência que diferencia maiúsculas de minúsculas.

Se o valor contiver um caractere diferente daqueles listados em valores de sinalizador com suporte, 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 com suporte
Flag Description
i Não diferencia maiúsculas de minúsculas (padrão false)
m Modo de várias linhas: ^ e $ corresponder à linha de início/término, além do texto de início/término (padrão false)
s Permitir . correspondência \n (padrão false)
c Diferencia maiúsculas de minúsculas (padrão true)

Valor de retorno

Valor booliano. true ou false.

Remarks

Estimativa de cardinalidade

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

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

Para desabilitar o comportamento de comentários automáticos, habilite o sinalizador de rastreamento 16268.

Suporte da plataforma

REGEXP_LIKE requer o nível de compatibilidade do banco de dados 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.

  • Em Instância Gerenciada de SQL do Azure, as funções de expressão regular do T-SQL estão disponíveis apenas com a políticade atualização de data SQL Server 2025 ou Always-up-to -date.
  • Funções de expressão regular do T-SQL estão disponíveis no Banco de Dados SQL do Azure, SQL Database no Fabric e a partir do SQL Server 2025.
  • As funções de expressão regular do T-SQL não estão disponíveis no SQL Server 2022 ou versões anteriores.
  • Funções escalares de expressões regulares do T-SQL estão disponíveis como recurso de pré-visualização em Fabric Data Warehouse. Para mais informações, veja Funções de expressões regulares em Fabric Data Warehouse. Funções de tabela com valores de expressão regular no T-SQL não estão disponíveis em Fabric Data Warehouse.

Suporte a padrões SARGable

REGEXP_LIKE é SARGável apenas quando o padrão começa com a âncora ^. Além disso, o padrão ancorado pode incluir:

  • Um quantificador: *, +, ?, {n}, {n,}, ou {n,m}. Por exemplo: ^ab+ ou ^ab*.
  • Caracteres de intervalo, como [0-9A-Za-z].

Para escapar de um metapersonagem, use a barra diagonal (\).

Essas condições permitem que o otimizador de consultas utilize operações de busca por índice para melhorar o desempenho da consulta.

Expressões regulares não respeitam as regras de colação. O comportamento deles pode ser diferente de outras funções de comparação de cadeias, como LIKE. Essa diferença é mais importante em colunas indexadas que possuem colações específicas do idioma.

Por exemplo, na ordenação turca, os caracteres i e I são tratados distintamente mesmo na ordenação que não diferencia maiúsculas de minúsculas devido a regras específicas do idioma. Para mais informações, veja o exemplo F. Compare o padrão SARGable e não-SARGable com a colation turca.

Note

O termo SARGable em bancos de dados relacionais refere-se a um predicado Search ARGumentable que pode usar um índice para acelerar a execução da consulta. Para obter mais informações, consulte o guia de arquitetura e design de índices do SQL Server e do SQL do Azure.

Examples

Um. Valores que começam e terminam com personagens específicos

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

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

B. Realize uma correspondência de padrão insensível a maiúsculas minúsculas

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

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

C. Datas de correspondência usando um padrão de expressão regular

Selecione todos os registros da Orders tabela em que a data do pedido está em fevereiro de 2020:

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

D. Combinar padrões de caracteres repetidos

Selecione todos os registros da 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,}');

E. Impor validação de dados com restrições CHECK

Crie uma tabela de funcionários 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})$'))
);

F. Compare o padrão SARGable e não-SARGable com a colação turca

Este exemplo demonstra o uso SARGável e não SARGável da REGEXP_LIKE função com a colação turca.

-- Create a temporary table with Turkish collation and and an index
CREATE TABLE #Users
(
    Username NVARCHAR (100) COLLATE Turkish_100_CI_AS_SC_UTF8 NOT NULL,
    INDEX idx_username (Username)
);

-- Insert sample data
INSERT INTO #Users (Username)
VALUES (N'i'), -- lowercase i
       (N'I'), -- uppercase dotless I
       (N'İ'), -- uppercase dotted İ
       (N'abc');

-- SARGable pattern: starts with ^ and uses quantifier
-- This will use index seek if applicable, but REGEXP_LIKE ignores collation
-- So 'i' and 'I' are treated as different characters
SELECT 'SARGable' AS PatternType,
       *
FROM #Users
WHERE REGEXP_LIKE (Username, '^i');

-- Non-SARGable pattern: does not start with ^.
-- REGEXP_LIKE performs full scan, and matches are
-- case-insensitive since 'i' flag is supplied,
-- so both 'i' and 'I' match.
SELECT 'Non-SARGable' AS PatternType,
       *
FROM #Users
WHERE REGEXP_LIKE (Username, 'i', 'i');

-- Cleanup
DROP TABLE #Users;