sql >> Database teknologi >  >> RDS >> Oracle

2 måder at returnere rækker, der kun indeholder ikke-alfanumeriske tegn i Oracle

Nedenfor er to metoder til at returnere rækker, der kun indeholder ikke-alfanumeriske tegn i Oracle Database.

Alfanumeriske tegn er alfabetiske tegn og numeriske tegn.

Eksempeldata

Vi bruger følgende data til vores eksempler:

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

Mulighed 1:Sammenlign med [:alnum:]

Vi kan bruge Oracles REGEXP_LIKE() funktion til at sammenligne værdien med et regulært udtryk, og neger den derefter med NOT operatør.

Oracles kapacitet til regulære udtryk inkluderer understøttelse af POSIX-tegnklasserne. Derfor kan vi bruge [:alnum:] POSIX-tegnklasse i vores regulære udtryk for at finde de rækker, der indeholder ikke-alfanumeriske tegn.

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

Resultat:

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

Det returnerede kun de rækker, der kun indeholder ikke-alfanumeriske tegn. Hvis en række indeholder både alfanumeriske og ikke-alfanumeriske tegn, returneres den ikke.

Mulighed 2:Angiv en række af tegn

En anden måde at gøre det på er at angive en række tegn i dit regulære udtryk.

Eksempel:

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

Resultat:

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

I dette tilfælde dækkede mit ekskluderingsinterval ikke alfanumeriske tegn som é , É og ø , og outputtet er derfor ikke en sand repræsentation af ikke-alfanumeriske tegn.

Her er et eksempel på at udvide rækkevidden for at udelukke disse tegn fra outputtet:

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

Resultat:

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

  1. Guide til designdatabase til opgavehåndtering i MySQL

  2. Bestemmelse af, om feltdataene i Oracle er af nummertypen

  3. Sådan opretter du et enkelt slutpunkt til din PostgreSQL-replikeringsopsætning ved hjælp af HAProxy

  4. Hvorfor bruge ikke null primær nøgle i TSQL?