Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Regex SQL server

Como posso recuperar o retorno(matching) de uma regex no sql server? Utilizei algumas regex mas o que é me retornado é apenas um bool caso ocorra o matching, não é o que eu queria. O objetivo é recuperar o resultado da regex de uma coluna e pegar esse retorno e inserir em outra coluna

6 respostas

Oi Franscisco tudo bem?

Você pode usar o LIKE dessa forma:

SELECT * FROM TABLE WHERE COLUNA LIKE '%[^a-z0-9 .]%'

Espero ter ajudado!!!

Bom dia André,

Obrigado pela ajuda, vou descrever o meu problema:

Tenho esse valor na coluna endereço "RUA GEN CAMARA, 266 - SHELTER CAR ESTACA - CENTRO 11010-122 - UBERLÂNDIA, SP -"

Estou utilizando a regex \d{5}-\d{3} pra recuperar o valor 11010-122 (CEP da pessoa).

Porém não é me retornado apenas esse valor, me é retornado tudo. Gostaria de uma forma que me retornasse apenas o CEP

Francisco.

A consulta

SELECT * FROM TABLE WHERE COLUNA LIKE '%[^a-z0-9 .]%'

Vai retornar tudo que possui um CEP.

O que você precisa fazer é extrair os dados do endereço usando funções de texto. Por exempço. Note que o endereço tem conjunto de textos separados po traço (-). Procure sobre o uso de SPLIT no SQL SERVER.

Victorino.

Francisco, entendi o que você quer fazer, você quer aplicar o regexp na saída da consulta também.

Dei uma procurada na internet e o máximo que vi foi uma extensão paga.

Mas eu tenho mais ou menos uma ideia de como fazer uma função que aplique o regexp na string da saída.

Você tem que fazer uma função que tenha um loop onde lê todas as substrings possíveis e pergute se é like regexp .

Exemplo:

RUA GEN CAMARA, 266 - SHELTER CAR ESTACA - CENTRO 11010-122 - UBERLÂNDIA, SP -

Ia pegar R e perguntar se é like regexp se sim retorna e sai da função.

Ia pegar depois RU e perguntar, RUA e perguntar fazer tudo até o fim da string.

Depois ua começar no U e perguntar, UA e perguntar, UA_ e perguntar, UA G e perguntar e por aí vai.

Tenta fazer essa função se não conseguir me avisa que eu tento fazer ela para você.

André,

Vou tentar fazer desse jeito. Resolvi esse problema de outra forma, vou compartilhar com vcs. Um amigo me deu uma luz, é o seguinte... No campo endereço descobrimos um padrão, não importa onde o CEP apareça na string, sempre é a ultima sequência numérica da string ou seja, não importa o tamanho da string ou quantos caracteres e possibilidades tenha... sempre o cep será a ultima sequencia numerica (é um sistema que preenche essa coluna). Então para os casos que o cep NÃO APARECE NO INICIO DA STRING utilizamos uma função que apaga tudo que não for um número. Ai teremos uma sequência de número, daí é só pega da direita pra esquerda os últimos 8 digitos e tenho o valor desejado. NO CASO DO CEP APARECE NO INICIO DA STRING utilizamos a mesma função de apagar o que não for digito e utilizamos um LEN(), caso o numero for igual a 8, recupero esse valor. Isso só funcionou porque a coluna tem um padrão de preenchimento... se fosse uma pessoa que preenchesse não daria certo, por isso vou tentar encontrar um jeito melhor de fazer isso.

solução!

acredito que tenha solução melhor, mas por exaustão pode percorrer a string com trechos de 9 caracteres e comparando com regex \d{5}-\d{3}. Como você sabe que o CEP está normalmente no final, o percurso pode começar de tamanho da string - 9 e decrescer

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software