sql >> Databasteknik >  >> RDS >> Oracle

2 sätt att returnera rader som endast innehåller icke-alfanumeriska tecken i Oracle

Nedan finns två metoder för att returnera rader som endast innehåller icke-alfanumeriska tecken i Oracle Database.

Alfanumeriska tecken är alfabetiska tecken och numeriska tecken.

Exempeldata

Vi använder följande data för våra exempel:

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;

Resultat:

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

Alternativ 1:Jämför med [:alnum:]

Vi kan använda Oracles REGEXP_LIKE() funktion för att jämföra värdet med ett reguljärt uttryck, förneka det sedan med NOT operatör.

Oracles kapacitet för reguljära uttryck inkluderar stöd för POSIX-teckenklasserna. Därför kan vi använda [:alnum:] POSIX-teckenklass i våra reguljära uttryck för att hitta de rader som innehåller icke-alfanumeriska tecken.

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

Resultat:

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

Det returnerade bara de rader som endast innehåller icke-alfanumeriska tecken. Om en rad innehåller både alfanumeriska och icke-alfanumeriska tecken, returneras den inte.

Alternativ 2:Ange ett antal tecken

Ett annat sätt att göra det är att ange ett antal tecken i ditt reguljära uttryck.

Exempel:

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

Resultat:

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

I det här fallet täckte inte mitt uteslutningsintervall alfanumeriska tecken som é , É och ø , och så utdata är inte en sann representation av icke-alfanumeriska tecken.

Här är ett exempel på att utöka intervallet för att utesluta dessa tecken från utdata:

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

Resultat:

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

  1. Anslut iPhone-appen till PostgreSQL med Libpq

  2. Felsökning av CPU-prestanda på VMware

  3. Bästa sättet att undvika dubbla inträde i mysql-databasen

  4. Infoga ett Python datetime.datetime-objekt i MySQL