sql >> Databáze >  >> RDS >> Oracle

2 způsoby, jak vrátit řádky, které obsahují pouze nealfanumerické znaky v Oracle

Níže jsou uvedeny dva způsoby vracení řádků, které obsahují pouze nealfanumerické znaky v databázi Oracle.

Alfanumerické znaky jsou abecední znaky a číselné znaky.

Ukázková data

Pro naše příklady použijeme následující data:

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;

Výsledek:

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

Možnost 1:Porovnat s [:alnum:]

Můžeme použít REGEXP_LIKE() Oracle funkci porovnat hodnotu s regulárním výrazem a poté ji negovat pomocí NOT operátor.

Schopnost regulárních výrazů Oracle zahrnuje podporu pro třídy znaků POSIX. Proto můžeme použít [:alnum:] Třída znaků POSIX v našich regulárních výrazech, abyste našli řádky, které obsahují nealfanumerické znaky.

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

Výsledek:

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

To vrátilo pouze ty řádky, které obsahují pouze nealfanumerické znaky. Pokud řádek obsahuje alfanumerické i nealfanumerické znaky, nebude vrácen.

Možnost 2:Určení rozsahu znaků

Dalším způsobem, jak to udělat, je zadat rozsah znaků v regulárním výrazu.

Příklad:

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

Výsledek:

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

V tomto případě můj rozsah vyloučení nepokrýval alfanumerické znaky jako é , É a ø , takže výstup není skutečnou reprezentací nealfanumerických znaků.

Zde je příklad rozšíření rozsahu pro vyloučení těchto znaků z výstupu:

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

Výsledek:

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

  1. SQLiteException žádná taková tabulka:ItemTable při kompilaci:Select_id,.... z ItemTable

  2. Jak uložit video obsah v databázi SQLite (nikoli cestu videa)

  3. Jak mohu uvést, že má stejná data ID jako smyčka while v PHP?

  4. Podpora transakcí motoru MyIsam