sql >> Database teknologi >  >> RDS >> PostgreSQL

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

Nedenfor er to metoder til at returnere rækker, der kun indeholder alfanumeriske tegn i PostgreSQL.

Alfanumeriske tegn er alfabetiske tegn og numeriske tegn.

Eksempel på data

Vi bruger følgende data til vores eksempler:

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
 null
 
 é
 É
 é 123
 ø
 ø 123

Mulighed 1:Sammenlign med [:alnum:]

Vi kan bruge PostgreSQL's ~ operator for at sammenligne værdien med et regulært udtryk.

PostgreSQLs regulære udtryksevne 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 c1 ~ '^[[:alnum:]]+$';

Resultat:

 Music
 Café
 007
 é
 É
 ø

Det returnerer kun de værdier, der udelukkende består af 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 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 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 det regulære udtryk.

Eksempel:

SELECT c1 FROM t1
WHERE 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. Det er fordi jeg ikke inkluderede é , É , eller ø tegn i mit område, og derfor er alle rækker, der indeholder disse tegn, udelukket fra outputtet.

Derfor kan det betale sig at være særligt opmærksom, når du bruger denne metode. Det ville være nemt ved et uheld at udelukke tegn, som du bør inkludere.

Men i overensstemmelse med dette interval kan vi inkludere mellemrum som dette:

SELECT c1 FROM t1 
WHERE c1 ~ '^[A-Za-z0-9 ]+$';

Resultat:

 Music
 Live Music
 Player 456
 007

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 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


  1. Sådan håndteres dividere med nul i SQL

  2. Hvordan kører man SQL-script i MySQL?

  3. Hvordan medtager man nul/0 resultater i COUNT aggregat?

  4. Hvordan man bedst får nogens 'rang' fra en scoretabel med php og mysql uden looping