Reconhecimento de padrões e extração de texto

Concluído

O SQL Server 2025 adiciona novas funções de expressão regular (REGEXP) e aprimora a função SUBSTRING para simplificar o trabalho com texto estruturado. Essas adições permitem que os desenvolvedores realizem pesquisas de texto flexíveis, extraiam padrões complexos e limpem ou transformem dados diretamente no T-SQL sem depender de scripts do lado do cliente ou funções CLR.

Visão geral das funções de correspondência de padrões e extração de texto

A nova família de funções REGEXP oferece suporte à avaliação de expressões regulares diretamente no SQL Server. Cada função permite operações de texto específicas baseadas em padrões.

REGEXP_LIKE

Verifica se uma cadeia de caracteres corresponde a um padrão de expressão regular. Retorna 1 se corresponder, 0 caso contrário.

REGEXP_SUBSTR

Extrai a primeira substring que corresponde a um padrão de expressão regular. Útil para extrair informações específicas, como números de telefone, datas ou endereços de e-mail.

REGEXP_REPLACE

Procura um padrão em uma cadeia de caracteres e substitui todas as ocorrências que correspondem ao padrão. Ele pode ser usado para limpeza e formatação de dados.

REGEXP_INSTR

Retorna a posição inicial da primeira substring que corresponde ao padrão dentro do texto fornecido. Ideal para localizar marcadores chave em texto estruturado.

REGEXP_COUNT

Conta o número de correspondências de um padrão de expressão regular em uma determinada cadeia de caracteres. Essa contagem é útil quando você precisa medir a frequência do padrão, como a contagem de dígitos, palavras ou símbolos no texto.

REGEXP_MATCHES

Retorna todas as substrings que correspondem a um padrão de expressão regular como resultado de uma tabela. Use-o quando precisar de várias capturas de uma única cadeia de caracteres, em vez de apenas a primeira correspondência.

REGEXP_SPLIT_TO_TABLE

Divide uma cadeia de caracteres em várias linhas usando um delimitador de expressão regular.

Melhoria SUBSTRING

A SUBSTRING função agora suporta um parâmetro de comprimento opcional. Quando omitido, extrai automaticamente da posição inicial especificada para o final da cadeia de caracteres, reduzindo a necessidade de cálculos manuais LEN().

Juntos, esses recursos permitem pesquisar, extrair e manipular padrões de texto diretamente no SQL Server 2025 com T-SQL conciso e legível.


Cenário de exemplo: extraindo e limpando dados de contato

Uma equipe de marketing mantém um banco de dados de mensagens de clientes em uma coluna chamada MessageText. Muitas entradas incluem números de telefone em diferentes formatos. Você precisa extrair o primeiro número de telefone de cada mensagem, normalizá-lo para um formato padrão e identificar mensagens que contenham números de telefone inválidos.

Dados de exemplo

Vamos supor que você tenha os seguintes dados de exemplo em uma tabela chamada CustomerMessages:

ID da mensagem Texto da Mensagem
1 "Ligue-me para (713) 555-1298 ou escritório 555-8811."
2 "Entre em contato comigo: +1-832-555-7821 obrigado!"
3 "Meu número é 713-555-9876 ramal 33"
4 "Nenhum telefone listado ainda."

Consulta: Identificar, extrair e padronizar

-- Extract the first phone number pattern and format it consistently
SELECT MessageID,
       REGEXP_SUBSTR(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}') AS RawNumber,
       REGEXP_REPLACE(
           REGEXP_SUBSTR(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}'),
           '\D', ''
       ) AS DigitsOnly,
       CASE 
           WHEN REGEXP_LIKE(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}') = 1 THEN 'Valid'
           ELSE 'Missing'
       END AS PhoneStatus
FROM dbo.CustomerMessages;

Results

ID da mensagem Número Bruto DigitsOnly PhoneStatus
1 (713) 555-1298 7135551298 Válido
2 +1-832-555-7821 18325557821 Válido
3 713-555-9876 7135559876 Válido
4 NULO NULO Faltam

Este exemplo usa REGEXP_SUBSTR para extrair o primeiro padrão de correspondência, REGEXP_REPLACE para remover caracteres não numéricos e REGEXP_LIKE para verificar números válidos. A consulta padroniza números de telefone em um formato consistente somente dígitos diretamente no T-SQL.


Exemplo 2: Dividindo dados com REGEXP_SPLIT_TO_TABLE e SUBSTRING

Suponha que outra tabela, CustomerFeedback, armazene tags separadas por vírgulas descrevendo os interesses do cliente. Você deseja separá-los em linhas individuais e extrair a primeira palavra-chave para indexação rápida.

SELECT FeedbackID,
       value AS Tag,
       SUBSTRING(value, 1) AS FirstWord
FROM CustomerFeedback
CROSS APPLY REGEXP_SPLIT_TO_TABLE(Tags, '\s*,\s*');

Esta consulta divide cada cadeia de caracteres delimitada por vírgulas em linhas enquanto usa o novo SUBSTRING comportamento (sem especificar o comprimento) para extrair todo o texto restante da posição inicial.

Results

FeedbackID Tag Primeira Palavra
1 viagens viagens
1 fotografia fotografia
2 caminhadas caminhadas
2 acampamento acampamento

Resumo

As novas funções REGEXP e a função SUBSTRING aprimorada no SQL Server 2025 oferecem recursos nativos de correspondência de padrões e extração de texto. Essas adições eliminam a necessidade de processamento externo de cadeia de caracteres, facilitando a limpeza, análise e análise de dados textuais dentro do mecanismo de banco de dados. Com essas ferramentas, os desenvolvedores podem simplificar pipelines de ETL, melhorar a qualidade dos dados e habilitar análises avançadas orientadas a texto diretamente no T-SQL.