Abaixo estão duas opções para retornar linhas que contêm apenas caracteres não alfanuméricos no PostgreSQL.
Caracteres não alfanuméricos incluem caracteres de pontuação como
[email protected]#&()–[{}]:;',?/*
e símbolos como `~$^+=<>“
, bem como caracteres de espaço em branco, como os caracteres de espaço ou tabulação. Dados de amostra
Usaremos os seguintes dados para nossos exemplos:
SELECT c1 FROM t1;
Resultado:
+----------------------+ | c1 | +----------------------+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | $1.50 | | Player 456 | | 007 | | NULL | | | | é | | É | | é 123 | | ø | | ø 123 | +----------------------+
Opção 1:Comparar com [:alnum:]
Podemos usar o
!~
do PostgreSQL operador para comparar nossa coluna com uma expressão regular. Usamos este operador quando queremos especificar que o valor não corresponde à expressão regular. A capacidade de expressão regular do MySQL inclui suporte para as classes de caracteres POSIX. Portanto, podemos usar o
[:alnum:]
classe de caracteres POSIX em nossa expressão regular. SELECT c1 FROM t1
WHERE c1 !~ '[[:alnum:]]';
Resultado:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
A string vazia também é num-numeric e, portanto, esse exemplo retornou a linha que contém a string vazia.
Podemos excluir strings vazias usando
NULLIF()
:SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';
Resultado:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
Opção 2:especificar um intervalo de caracteres
Outra maneira de fazer isso é especificar um intervalo de caracteres em sua expressão regular.
Exemplo:
SELECT c1 FROM t1
WHERE c1 !~ '[A-Za-z0-9]';
Resultado:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
E para remover a string vazia:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]';
Resultado:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
Nesse caso, meu intervalo de exclusão não abrangeu caracteres alfanuméricos como
é
, É
, e ø
e, portanto, a saída não é uma representação verdadeira de caracteres não alfanuméricos. Dito isso, pelo menos esse método oferece a opção de especificar os caracteres exatos que você deseja incluir ou excluir do resultado.