Hieronder staan twee methoden voor het retourneren van rijen die alleen niet-alfanumerieke tekens bevatten in Oracle Database.
Alfanumerieke tekens zijn alfabetische tekens en numerieke tekens.
Voorbeeldgegevens
We gebruiken de volgende gegevens voor onze voorbeelden:
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;
Resultaat:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 () [email protected]#&()–[{}]:;',?/* `~$^+=<>“ $1.50 Player 456 007 é É é 123 ø ø 123
Optie 1:Vergelijk met [:alnum:]
We kunnen Oracle's REGEXP_LIKE()
. gebruiken functie om de waarde te vergelijken met een reguliere expressie en deze vervolgens te negeren met de NOT
telefoniste.
De reguliere expressiemogelijkheid van Oracle omvat ondersteuning voor de POSIX-tekenklassen. Daarom kunnen we de [:alnum:]
. gebruiken POSIX-tekenklasse in onze reguliere expressies om de rijen te vinden die niet-alfanumerieke tekens bevatten.
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[[:alnum:]]');
Resultaat:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
Dat leverde alleen die rijen op die alleen niet-alfanumerieke tekens bevatten. Als een rij zowel alfanumerieke als niet-alfanumerieke tekens bevat, wordt deze niet geretourneerd.
Optie 2:specificeer een reeks tekens
Een andere manier om dit te doen, is door een reeks tekens in uw reguliere expressie op te geven.
Voorbeeld:
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[A-Za-z0-9]');
Resultaat:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
In dit geval omvatte mijn uitsluitingsbereik geen alfanumerieke tekens zoals é
, É
, en ø
, en dus is de uitvoer geen echte weergave van niet-alfanumerieke tekens.
Hier is een voorbeeld van het uitbreiden van het bereik om die tekens van de uitvoer uit te sluiten:
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');
Resultaat:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“