sql >> Base de Datos >  >> RDS >> PostgreSQL

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

A continuación hay dos opciones para devolver filas que solo contienen caracteres no alfanuméricos en PostgreSQL.

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:

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:]

Podemos usar !~ de PostgreSQL operador para comparar nuestra columna con una expresión regular. Usamos este operador cuando queremos especificar que el valor no coincide con la expresión regular.

La capacidad de expresión regular de MySQL incluye soporte para las clases de caracteres POSIX. Por lo tanto, podemos usar el [:alnum:] Clase de caracteres POSIX en nuestra expresión regular.

SELECT c1 FROM t1 
WHERE c1 !~ '[[:alnum:]]';

Resultado:

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

La cadena vacía también es numérica, por lo que ese ejemplo devolvió la fila que contiene la cadena vacía.

Podemos excluir cadenas vacías usando NULLIF() :

SELECT c1 FROM t1 
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';

Resultado:

 ()
 [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 !~ '[A-Za-z0-9]';

Resultado:

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

Y para eliminar la cadena vacía:

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

Resultado:

 ()
 [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.