Abaixo estão dois métodos para retornar linhas que contêm apenas caracteres alfanuméricos no PostgreSQL.
Caracteres alfanuméricos são caracteres alfabéticos e caracteres numéricos.
Dados de amostra
Usaremos os seguintes dados para nossos exemplos:
SELECT c1 FROM t1;
Resultado:
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 o valor com uma expressão regular. A capacidade de expressão regular do PostgreSQL inclui suporte para as classes de caracteres POSIX. Portanto, podemos usar o
[:alnum:]
classe de caracteres POSIX em nossas expressões regulares para localizar as linhas que contêm caracteres alfanuméricos. SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:]]+$';
Resultado:
Music Café 007 é É ø
Isso retorna apenas os valores que consistem apenas em caracteres alfanuméricos. Se uma linha contiver caracteres alfanuméricos e não alfanuméricos, ela não será retornada.
Observe que o caractere de espaço é considerado não alfanumérico e, portanto, se quisermos incluir espaços, podemos fazer isso:
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:] ]+$';
Resultado:
Music Live Music Café Café Del Mar 100 Cafés Player 456 007 é É é 123 ø ø 123
Para retornar todas as linhas que contêm caracteres alfanuméricos (mesmo que a linha também contenha caracteres não alfanuméricos), podemos fazer isso:
SELECT c1 FROM t1
WHERE c1 ~ '[[:alnum:]]';
Resultado:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é É é 123 ø ø 123
Opção 2:especificar um intervalo de caracteres
Outra maneira de fazer isso é especificar um intervalo de caracteres dentro da expressão regular.
Exemplo:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9]+$';
Resultado:
Music 007
Você notará que isso retornou menos linhas do que com nosso primeiro exemplo. Isso porque não incluí o
é
, É
, ou ø
caracteres no meu intervalo e, portanto, todas as linhas que contêm esses caracteres são excluídas da saída. Portanto, vale a pena estar especialmente atento ao usar esse método. Seria fácil excluir acidentalmente os caracteres que você deveria incluir.
No entanto, mantendo esse intervalo, podemos incluir espaços como este:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9 ]+$';
Resultado:
Music Live Music Player 456 007
E podemos usar o seguinte para incluir todas as linhas que contêm caracteres do nosso intervalo (mesmo que também contenham caracteres fora desse intervalo):
SELECT c1 FROM t1
WHERE c1 ~ '[A-Za-z0-9]';
Resultado:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é 123 ø 123