Selecionar registros com caracteres especiais utilizando SQL

Selecionar registros com caracteres especiais utilizando SQL

Caso você tenha a necessidade de selecionar registros do seu banco de dados que possuam num determinado campo acentos ou outros caracteres especiais, você pode resolver este problema utilizando uma expressão regular. Vamos ver exemplos de como identificar caracteres especiais utilizando SQL Server e MySQL

Uma expressão regular são padrões utilizados para identificar determinadas combinações de caracteres em uma string. As expressões regulares também são chamadas de Regex. Uma expressão regular depende de um Regex Engine para ser processada. Você pode utilizar expressões regulares em banco de dados SQL e também em linguagens de programação como PHP ou JavaScript

 

Vamos começar com o SQL Server. Veja o exemplo a seguir:

 SELECT   * from tabela where campo LIKE %[^0-9a-zA-Z ]%

No exemplo acima, foi feito um like no campo para selecionar registros de acordo com expressão regular que está entre chaves. A expressão regular seleciona tudo o que NÃO é número, caracteres de A a Z ou espaços em branco.

As expressões regulares podem ser usadas em outras situações. Imagine por exemplo que você quer selecionar os registros de um campo código onde o código comece com o número 5 e tenha 2 digítos depois do 5. Você poderia resolver este problema utilizando a seguinte consulta:

SELECT * FROM tabela WHERE campo LIKE "5[0-9][0-9]"

Agora vamos ver os mesmos exemplos no banco de dados MySQL. A consulta para selecionar registros com acentuação ou caracteres especiais ficaria assim:

SELECT * from tabela where campo REGEXP '[^0-9a-zA-Z ]';

E a consulta que retorna registros que comecem com 5 e tenham 2 dígitos ficaria desta forma:

SELECT * FROM tabela WHERE campo REGEXP '9[0-9][0-9]';

 

Veja a seguir uma tabela com os operadores mais comuns utilizados em expressões regulares

 

[ ]Define uma lista de caracteres.
ˆIndica uma pesquisa somente no início do bloco
$Indica uma pesquisa somente no fim do bloco
{x}Repete exatamente "x" vezes um caractere ou uma lista
?Declara um ou mais caracteres como opcionais
+Repete pelo menos uma vez
.Indica qualquer caractere
dEquivale a [0-9], seleciona apenas números.
( )Define um bloco de caracteres
wSeleciona todos os caracteres alfanuméricos, ou seja, letras e números, mas não acentos ou caracteres especiais. É o equivalente a [a-zA-Z_0-9]
sSeleciona espaços
?!Não deve conter a regra informada
{x,y}Repetir no mínimo "x" ou no máximo "y" um caractere ou uma lista

 

Expressões regulares são um assunto extenso e muito interessante. Para saber mais, abaixo segue um pequeno tutorial.

https://tableless.com.br/o-basico-sobre-expressoes-regulares/

 

Outros conteudos que podem ser de seu interesse

Formatando diferença de horas entre duas datas com SQL
15/09/2024SQL

Formatando diferença de horas entre duas datas com SQL

Veja como calcular e formatar diferença entre horas com SQL

Saiba mais...
Criando totais e subtotais com agrupamento no SQL
28/08/2022SQL

Criando totais e subtotais com agrupamento no SQL

Veja como criar totais e subtotais para seus resultados no SQL

Saiba mais...

Conteúdo sobre banco de dados sem complicação!