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 |
d | Equivale a [0-9], seleciona apenas números. |
( ) | Define um bloco de caracteres |
w | Seleciona 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] |
s | Seleciona 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/