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

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


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

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:
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 encontrar as linhas que contêm apenas caracteres alfanuméricos e, em seguida, negue isso com o NOT operador.
SELECT c1 FROM t1 
WHERE c1 NOT REGEXP '[[:alnum:]]';

Resultado:
+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
|                      |
+----------------------+

Se você precisar excluir um caractere específico, sempre poderá usar o NULLIF() função.

Por exemplo, vamos excluir a string vazia da última linha:
SELECT c1 FROM t1 
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';

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

Resultado:
+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
|                      |
| é                    |
| É                    |
| ø                    |
+----------------------+

E para remover a string vazia:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]';

Resultado:
+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [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.