PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

2 maneiras de retornar linhas que contêm apenas caracteres alfanuméricos no PostgreSQL


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