MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

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


Abaixo estão dois métodos para retornar linhas que contêm apenas caracteres alfanuméricos no MariaDB.

Caracteres alfanuméricos são caracteres alfabéticos e caracteres numéricos.

Dados de amostra


Usaremos os seguintes dados para nossos exemplos:
CREATE TABLE t1 (
    c1 varchar(255) NULL
    );

INSERT INTO t1 VALUES
    ('Music'),
    ('Live Music'),
    ('Café'),
    ('Café Del Mar'),
    ('100 Cafés'),
    ('[email protected]'),
    ('1 + 1'),
    ('()'),
    ('[email protected]#&()–[{}]:;'',?/*'),
    ('`~$^+=<>“'),
    ('$1.50'),
    ('Player 456'),
    ('007'),
    (null),
    (''),
    ('é'),
    ('É'),
    ('é 123'),
    ('ø'),
    ('ø 123');
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:]


A capacidade de expressão regular do MariaDB 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 REGEXP '^[[:alnum:]]+$';

Resultado:
+-------+
| c1    |
+-------+
| Music |
| Café  |
| 007   |
| é     |
| É     |
| ø     |
+-------+

Isso retornou apenas as linhas que contêm nada além de 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 REGEXP '^[[:alnum:] ]+$';

Resultado:
+---------------+
| c1            |
+---------------+
| 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 REGEXP '[[:alnum:]]';

Resultado:
+-------------------+
| c1                |
+-------------------+
| 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 em sua expressão regular.

Exemplo:
SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9]+$';

Resultado:
+-------+
| c1    |
+-------+
| Music |
| 007   |
+-------+

Você notará que isso retornou menos linhas do que com nosso primeiro exemplo. Isso ocorre 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, você precisará ter cuidado ao usar esse método, caso exclua acidentalmente caracteres que deve incluir.

No entanto, mantendo esse intervalo, podemos incluir espaços como este:
SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9 ]+$';

Resultado:
+------------+
| c1         |
+------------+
| 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 REGEXP '[A-Za-z0-9]';

Resultado:
+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é 123             |
| ø 123             |
+-------------------+