Reconhecimento de padrões e extração de texto
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, extraam 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 regexp de funções dá suporte à avaliação de expressão regular diretamente dentro do SQL Server. Cada função habilita 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, caso contrário, 0.
REGEXP_SUBSTR
Extrai a primeira subcadeia de caracteres 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 email.
REGEXP_REPLACE
Pesquisa uma cadeia de caracteres por um padrão 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 subcadeia de caracteres que corresponde ao padrão dentro do texto fornecido. Ideal para localizar marcadores de 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 de padrões, como contagem de dígitos, palavras ou símbolos no texto.
REGEXP_MATCHES
Retorna todas as subcadeias de caracteres que correspondem a um padrão de expressão regular como resultado de 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.
Aprimoramento de SUBSTRING
A SUBSTRING função agora dá suporte a um parâmetro de comprimento opcional. Quando omitido, ele extrai automaticamente da posição inicial especificada até 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 do cliente em uma coluna chamada MessageText. Muitas entradas incluem números de telefone em formatos diferentes. Você precisa extrair o primeiro número de telefone de cada mensagem, normalizá-lo para um formato padrão e identificar mensagens que contêm números de telefone inválidos.
Dados de Exemplo
Vamos supor que você tenha os seguintes dados de exemplo em uma tabela chamada CustomerMessages:
| MessageID | Texto da Mensagem |
|---|---|
| 1 | "Ligue para mim no (713) 555-1298 ou no office 555-8811." |
| 2 | "Entre em contato comigo: +1-832-555-7821 obrigado!" |
| 3 | "Meu número é 713-555-9876 ext. 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;
Resultados
| MessageID | RawNumber | 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 | Ausente |
Este exemplo usa REGEXP_SUBSTR para extrair o primeiro padrão correspondente, 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 somente dígitos consistente diretamente no T-SQL.
Exemplo 2: Dividir dados com REGEXP_SPLIT_TO_TABLE e SUBSTRING
Suponha que outra tabela CustomerFeedback armazene etiquetas separadas por vírgulas que descrevem os interesses do cliente. Você deseja separá-las 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*');
Essa consulta divide cada cadeia de caracteres delimitada por vírgulas em linhas ao usar o novo SUBSTRING comportamento (sem especificar comprimento) para extrair todo o texto restante da posição inicial.
Resultados
| FeedbackID | Etiqueta | FirstWord |
|---|---|---|
| 1 | viajar | viajar |
| 1 | fotografia | fotografia |
| 2 | caminhada | caminhada |
| 2 | campismo | campismo |
Resumo
As novas funções REGEXP e a função SUBSTRING aprimorada no SQL Server 2025 oferecem funcionalidades nativas de correspondência de padrões e extração de texto. Essas adições eliminam a necessidade de processamento de cadeia de caracteres externa, 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 os pipelines de ETL, melhorar a qualidade dos dados e habilitar análises avançadas orientadas a texto diretamente no T-SQL.