Oracle
 sql >> Datenbank >  >> RDS >> Oracle

2 Möglichkeiten, Zeilen zurückzugeben, die nur alphanumerische Zeichen in Oracle enthalten

Im Folgenden finden Sie zwei Methoden zum Zurückgeben von Zeilen, die nur alphanumerische Zeichen in Oracle Database enthalten.

Alphanumerische Zeichen sind alphabetische Zeichen und numerische Zeichen.

Beispieldaten

Wir verwenden die folgenden Daten für unsere Beispiele:

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;

Ergebnis:

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

Option 1:Mit [:alnum:] vergleichen

Wir können Oracles REGEXP_LIKE() verwenden Funktion, um den Wert mit einem regulären Ausdruck zu vergleichen.

Die Funktion für reguläre Ausdrücke von Oracle umfasst die Unterstützung der POSIX-Zeichenklassen. Daher können wir den [:alnum:] verwenden POSIX-Zeichenklasse in unseren regulären Ausdrücken, um die Zeilen zu finden, die alphanumerische Zeichen enthalten.

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

Ergebnis:

Music
Café
007
é
É
ø

Dadurch wurden nur die Zeilen zurückgegeben, die nur alphanumerische Zeichen enthalten. Wenn eine Zeile sowohl alphanumerische als auch nicht-alphanumerische Zeichen enthält, wird sie nicht zurückgegeben.

Beachten Sie, dass das Leerzeichen als nicht alphanumerisch betrachtet wird. Wenn wir also Leerzeichen einfügen möchten, können wir Folgendes tun:

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

Ergebnis:

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

Um alle Zeilen zurückzugeben, die enthalten alphanumerische Zeichen (auch wenn die Zeile auch nicht-alphanumerische Zeichen enthält), können wir Folgendes tun:

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

Ergebnis:

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

Option 2:Geben Sie einen Zeichenbereich an

Eine andere Möglichkeit besteht darin, einen Bereich von Zeichen in Ihrem regulären Ausdruck anzugeben.

Beispiel:

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

Ergebnis:

Music
007

Sie werden feststellen, dass dies weniger Zeilen zurückgegeben hat als bei unserem ersten Beispiel. Das liegt daran, dass ich den é nicht eingefügt habe , É , oder ø Zeichen in meinem Bereich, und daher werden alle Zeilen, die diese Zeichen enthalten, von der Ausgabe ausgeschlossen.

Daher müssen Sie bei der Verwendung dieser Methode vorsichtig sein, falls Sie versehentlich Zeichen ausschließen, die Sie einschließen sollten.

Hier ist es wieder mit einem Bereich, der diese Zeichen enthält:

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

Ergebnis:

Music
Café
007
é
É
ø

Wir können Leerzeichen wie diese einfügen:

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

Ergebnis:

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

Und wir können Folgendes verwenden, um alle Zeilen einzuschließen, die enthalten Zeichen aus unserem Bereich (auch wenn sie auch Zeichen außerhalb dieses Bereichs enthalten):

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

Ergebnis:

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

Oder wenn wir diese Unicode-Zeichen nicht einschließen möchten, können wir es folgendermaßen vereinfachen:

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

Ergebnis:

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

Dies schließt diese Unicode-Zeichen nicht aus der Ausgabe aus, wenn sie zufällig eine Zeile mit alphanumerischen Zeichen teilen.