sql >> Base de Datos >  >> RDS >> MariaDB

2 formas de devolver filas que solo contienen caracteres no alfanuméricos en MariaDB

A continuación se muestran dos métodos para devolver filas que contienen solo caracteres no alfanuméricos en MariaDB.

Los caracteres no alfanuméricos incluyen caracteres de puntuación como [email protected]#&()–[{}]:;',?/* y símbolos como `~$^+=<>“ , así como caracteres de espacio en blanco como el espacio o los tabuladores.

Datos de muestra

Usaremos los siguientes datos para nuestros ejemplos:

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                |
+----------------------+

Opción 1:comparar con [:alnum:]

La capacidad de expresiones regulares de MariaDB incluye soporte para las clases de caracteres POSIX. Por lo tanto, podemos usar el [:alnum:] clase de caracteres POSIX en nuestras expresiones regulares para encontrar las filas que contienen solo caracteres alfanuméricos, luego anule eso con NOT operador.

SELECT c1 FROM t1 
WHERE c1 NOT REGEXP '[[:alnum:]]';

Resultado:

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

Si necesita excluir un carácter específico, siempre puede usar NULLIF() función.

Por ejemplo, excluyamos la cadena vacía de la última fila:

SELECT c1 FROM t1 
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';

Resultado:

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

Opción 2:especificar un rango de caracteres

Otra forma de hacerlo es especificar un rango de caracteres dentro de su expresión regular.

Ejemplo:

SELECT c1 FROM t1 
WHERE c1 NOT REGEXP '[A-Za-z0-9]';

Resultado:

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

Y para eliminar la cadena vacía:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]';

Resultado:

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

En este caso, mi rango de exclusión no cubría caracteres alfanuméricos como é , É , y ø , por lo que la salida no es una representación real de caracteres no alfanuméricos. Dicho esto, al menos este método te da la opción de especificar los caracteres exactos que quieres incluir o excluir del resultado.