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

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

Di seguito sono riportati due metodi per restituire righe che contengono solo caratteri 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.

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 alfanumerici.

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[[:alnum:]]+$');

Risultato:

Music
Café
007
é
É
ø

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

Nota che il carattere spazio è considerato non alfanumerico, quindi se vogliamo includere spazi, possiamo farlo:

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[[:alnum:] ]+$');

Risultato:

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

Per restituire tutte le righe che contengono caratteri alfanumerici (anche se la riga contiene anche caratteri non alfanumerici), possiamo farlo:

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

Risultato:

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

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 REGEXP_LIKE(c1, '^[A-Za-z0-9]+$');

Risultato:

Music
007

Noterai che questo ha restituito meno righe rispetto al nostro primo esempio. Questo perché non ho incluso il é , É o ø caratteri nel mio intervallo, quindi tutte le righe che contengono quei caratteri sono escluse dall'output.

Pertanto, dovrai fare attenzione quando utilizzi questo metodo, nel caso in cui escludi accidentalmente i caratteri che dovresti includere.

Eccolo di nuovo con un intervallo che include quei caratteri:

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

Risultato:

Music
Café
007
é
É
ø

Possiamo includere spazi come questo:

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

Risultato:

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

E possiamo usare quanto segue per includere tutte le righe che contengono caratteri del nostro intervallo (anche se contengono anche caratteri al di fuori di questo intervallo):

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

Risultato:

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

Oppure, se non vogliamo includere quei caratteri unicode, possiamo semplificarlo in questo modo:

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

Risultato:

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

Ciò non esclude quei caratteri unicode dall'output se condividono una riga con caratteri alfanumerici.