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

2 Möglichkeiten zum Zurückgeben von Zeilen, die nur nicht-alphanumerische Zeichen in Oracle enthalten

Im Folgenden finden Sie zwei Methoden zum Zurückgeben von Zeilen, die nur nicht-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, und negiere ihn dann mit NOT Betreiber.

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 nicht-alphanumerische Zeichen enthalten.

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

Ergebnis:

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

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

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

Ergebnis:

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

In diesem Fall umfasste mein Ausschlussbereich keine alphanumerischen Zeichen wie é , É , und ø , und daher ist die Ausgabe keine echte Darstellung von nicht-alphanumerischen Zeichen.

Hier ist ein Beispiel für die Erweiterung des Bereichs, um diese Zeichen aus der Ausgabe auszuschließen:

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

Ergebnis:

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