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

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

Nedenfor er to metoder til at returnere rækker, der kun indeholder 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.

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 alfanumeriske tegn.

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[[:alnum:]]+$');

Resultat:

Music
Café
007
é
É
ø

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

Bemærk, at mellemrumstegnet betragtes som ikke-alfanumerisk, og hvis vi vil inkludere mellemrum, kan vi gøre dette:

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[[:alnum:] ]+$');

Resultat:

Music
Live Music
Café
Café Del Mar
100 Cafés
Player 456
007
é
É
é 123
ø
ø 123

For at returnere alle rækker, der indeholder alfanumeriske tegn (selvom rækken også indeholder ikke-alfanumeriske tegn), kan vi gøre dette:

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

Resultat:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
$1.50
Player 456
007
é
É
é 123
ø
ø 123

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

Resultat:

Music
007

Du vil bemærke, at dette returnerede færre rækker end med vores første eksempel. Dette skyldes, at jeg ikke inkluderede é , É , eller ø tegn i mit område, og derfor er alle rækker, der indeholder disse tegn, udelukket fra outputtet.

Derfor skal du være forsigtig, når du bruger denne metode, hvis du ved et uheld udelukker tegn, som du bør inkludere.

Her er det igen med en række, der inkluderer disse tegn:

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

Resultat:

Music
Café
007
é
É
ø

Vi kan inkludere mellemrum som dette:

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

Resultat:

Music
Live Music
Café
Café Del Mar
100 Cafés
Player 456
007
é
É
é 123
ø
ø 123

Og vi kan bruge følgende til at inkludere alle rækker, der indeholder tegn fra vores rækkevidde (selvom de også indeholder tegn uden for dette område):

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

Resultat:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
$1.50
Player 456
007
é
É
é 123
ø
ø 123

Eller hvis vi ikke ønsker at inkludere disse unicode-tegn, kan vi forenkle det til dette:

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

Resultat:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
$1.50
Player 456
007
é 123
ø 123

Dette udelukker ikke disse unicode-tegn fra outputtet, hvis de tilfældigvis deler en række med alfanumeriske tegn.


  1. Division af heltal giver 0

  2. SQL Server svarende til Oracles CREATE OR REPLACE VIEW

  3. Sådan får du en liste over kolonner med unikke begrænsninger i SQL Server-databasen - SQL Server / TSQL Tutorial Del 98

  4. Automatiseret eller regelmæssig backup af mysql-data