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
example@sqldat.com
1 + 1
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“
$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 example@sqldat.com 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 example@sqldat.com 1 + 1 $1.50 Player 456 007 é 123 ø 123