sql >> Base de Datos >  >> RDS >> Oracle

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

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

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

Datos de muestra

Usaremos los siguientes datos para nuestros ejemplos:

CREATE TABLE t1 (
    c1 varchar(255) NULL
    );

INSERT INTO t1 (c1) 
    WITH c AS (
        SELECT 'Music' FROM DUAL UNION ALL
        SELECT 'Live Music' FROM DUAL UNION ALL
        SELECT 'Café' FROM DUAL UNION ALL
        SELECT 'Café Del Mar' FROM DUAL UNION ALL
        SELECT '100 Cafés' FROM DUAL UNION ALL
        SELECT '[email protected]' FROM DUAL UNION ALL
        SELECT '1 + 1' FROM DUAL UNION ALL
        SELECT '()' FROM DUAL UNION ALL
        SELECT '[email protected]#&()–[{}]:;'',?/*' FROM DUAL UNION ALL
        SELECT '`~$^+=<>“' FROM DUAL UNION ALL
        SELECT '$1.50' FROM DUAL UNION ALL
        SELECT 'Player 456' FROM DUAL UNION ALL
        SELECT '007' FROM DUAL UNION ALL
        SELECT 'é' FROM DUAL UNION ALL
        SELECT 'É' FROM DUAL UNION ALL
        SELECT 'é 123' FROM DUAL UNION ALL
        SELECT 'ø' FROM DUAL UNION ALL
        SELECT 'ø 123' FROM DUAL)
SELECT * FROM c;

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
é
É
é 123
ø
ø 123

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

Podemos usar REGEXP_LIKE() de Oracle función para comparar el valor con una expresión regular.

La capacidad de expresión regular de Oracle 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 REGEXP_LIKE(c1, '^[[:alnum:]]+$');

Resultado:

Music
Café
007
é
É
ø

Eso devolvió solo aquellas filas que contienen nada más que 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 REGEXP_LIKE(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 REGEXP_LIKE(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 su expresión regular.

Ejemplo:

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[A-Za-z0-9]+$');

Resultado:

Music
007

Notará que esto devolvió menos filas que con nuestro primer ejemplo. Esto se debe a que 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, deberá tener cuidado al usar este método, en caso de que excluya accidentalmente caracteres que debería incluir.

Aquí está de nuevo con un rango que incluye esos caracteres:

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[A-Za-zÀ-Þß-ÿ0-9]+$');

Resultado:

Music
Café
007
é
É
ø

Podemos incluir espacios como este:

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[A-Za-zÀ-Þß-ÿ0-9 ]+$');

Resultado:

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

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 REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');

Resultado:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
$1.50
Player 456
007
é
É
é 123
ø
ø 123

O si no queremos incluir esos caracteres Unicode, podemos simplificarlo a esto:

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(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

Esto no excluye esos caracteres Unicode de la salida si comparten una fila con caracteres alfanuméricos.