Oracle
 sql >> Database >  >> RDS >> Oracle

2 modi per restituire righe che contengono solo caratteri non alfanumerici in Oracle

Di seguito sono riportati due metodi per restituire righe che contengono solo caratteri non alfanumerici in Oracle Database.

I caratteri alfanumerici sono caratteri alfabetici e caratteri numerici.

Dati campione

Utilizzeremo i seguenti dati per i nostri esempi:

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;

Risultato:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
()
[email protected]#&()–[{}]:;',?/*
`~$^+=<>“
$1.50
Player 456
007
é
É
é 123
ø
ø 123

Opzione 1:confronta con [:alnum:]

Possiamo utilizzare REGEXP_LIKE() di Oracle funzione per confrontare il valore con un'espressione regolare, quindi negarlo con NOT operatore.

La funzionalità di espressione regolare di Oracle include il supporto per le classi di caratteri POSIX. Pertanto, possiamo usare il [:alnum:] classe di caratteri POSIX nelle nostre espressioni regolari per trovare le righe che contengono caratteri non alfanumerici.

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

Risultato:

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

Ciò ha restituito solo quelle righe che contengono solo caratteri non alfanumerici. Se una riga contiene sia caratteri alfanumerici che non alfanumerici, non viene restituita.

Opzione 2:specifica un intervallo di caratteri

Un altro modo per farlo è specificare un intervallo di caratteri all'interno dell'espressione regolare.

Esempio:

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

Risultato:

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

In questo caso, il mio intervallo di esclusione non copriva i caratteri alfanumerici come é , É e ø , e quindi l'output non è una vera rappresentazione di caratteri non alfanumerici.

Ecco un esempio di espansione dell'intervallo per escludere quei caratteri dall'output:

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

Risultato:

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