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

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

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

Los caracteres alfanuméricos son caracteres alfabéticos y caracteres numéricos.

Datos de muestra

Usaremos los siguientes datos para nuestros ejemplos:

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

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

Podemos usar ~ de PostgreSQL operador para comparar el valor con una expresión regular.

La capacidad de expresiones regulares de PostgreSQL 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 caracteres alfanuméricos.

SELECT c1 FROM t1 
WHERE c1 ~ '^[[:alnum:]]+$';

Resultado:

 Music
 Café
 007
 é
 É
 ø

Eso devuelve solo los valores que consisten únicamente en caracteres alfanuméricos. Si una fila contiene caracteres alfanuméricos y no alfanuméricos, no se devuelve.

Tenga en cuenta que el carácter de espacio se considera no alfanumérico, por lo que si queremos incluir espacios, podemos hacer esto:

SELECT c1 FROM t1 
WHERE c1 ~ '^[[:alnum:] ]+$';

Resultado:

 Music
 Live Music
 Café
 Café Del Mar
 100 Cafés
 Player 456
 007
 é
 É
 é 123
 ø
 ø 123

Para devolver todas las filas que contienen caracteres alfanuméricos (incluso si la fila también contiene caracteres no alfanuméricos), podemos hacer esto:

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

Opción 2:especificar un rango de caracteres

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

Ejemplo:

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

Resultado:

 Music
 007

Notará que esto devolvió menos filas que con nuestro primer ejemplo. Eso es porque no incluí el é , É , o ø caracteres en mi rango, por lo que cualquier fila que contenga esos caracteres se excluye de la salida.

Por lo tanto, vale la pena ser especialmente cuidadoso al usar este método. Sería fácil excluir accidentalmente los caracteres que deberías incluir.

Sin embargo, manteniendo este rango, podemos incluir espacios como este:

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

Resultado:

 Music
 Live Music
 Player 456
 007

Y podemos usar lo siguiente para incluir todas las filas que contienen caracteres de nuestro rango (incluso si también contienen caracteres fuera de este rango):

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