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 'example@sqldat.com' FROM DUAL UNION ALL
SELECT '1 + 1' FROM DUAL UNION ALL
SELECT '()' FROM DUAL UNION ALL
SELECT 'example@sqldat.com#&()–[{}]:;'',?/*' 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
example@sqldat.com
1 + 1
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“
$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:
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“ 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:
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“
é
É
ø
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:
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“