sql >> Database >  >> RDS >> PostgreSQL

2 manieren om rijen te retourneren die alleen alfanumerieke tekens bevatten in PostgreSQL

Hieronder staan ​​twee methoden voor het retourneren van rijen die alleen alfanumerieke tekens bevatten in PostgreSQL.

Alfanumerieke tekens zijn alfabetische tekens en numerieke tekens.

Voorbeeldgegevens

We gebruiken de volgende gegevens voor onze voorbeelden:

SELECT c1 FROM t1;

Resultaat:

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

Optie 1:Vergelijk met [:alnum:]

We kunnen PostgreSQL's ~ . gebruiken operator om de waarde te vergelijken met een reguliere expressie.

De reguliere expressiemogelijkheid van PostgreSQL omvat ondersteuning voor de POSIX-tekenklassen. Daarom kunnen we de [:alnum:] . gebruiken POSIX-tekenklasse in onze reguliere expressies om de rijen te vinden die alfanumerieke tekens bevatten.

SELECT c1 FROM t1 
WHERE c1 ~ '^[[:alnum:]]+$';

Resultaat:

 Music
 Café
 007
 é
 É
 ø

Dat retourneert alleen de waarden die uitsluitend uit alfanumerieke tekens bestaan. Als een rij zowel alfanumerieke als niet-alfanumerieke tekens bevat, wordt deze niet geretourneerd.

Merk op dat het spatieteken als niet-alfanumeriek wordt beschouwd, en dus als we spaties willen opnemen, kunnen we dit doen:

SELECT c1 FROM t1 
WHERE c1 ~ '^[[:alnum:] ]+$';

Resultaat:

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

Alle rijen retourneren die bevatten alfanumerieke tekens (zelfs als de rij ook niet-alfanumerieke tekens bevat), kunnen we dit doen:

SELECT c1 FROM t1 
WHERE c1 ~ '[[:alnum:]]';

Resultaat:

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

Optie 2:specificeer een reeks tekens

Een andere manier om dit te doen is door een reeks tekens binnen de reguliere expressie op te geven.

Voorbeeld:

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

Resultaat:

 Music
 007

U zult merken dat dit minder rijen opleverde dan bij ons eerste voorbeeld. Dat komt omdat ik de é . niet heb opgenomen , É , of ø tekens in mijn bereik, en dus worden alle rijen die deze tekens bevatten uitgesloten van de uitvoer.

Daarom loont het om extra voorzichtig te zijn bij het gebruik van deze methode. Het zou gemakkelijk zijn om per ongeluk tekens uit te sluiten die u zou moeten opnemen.

Binnen dit bereik kunnen we echter spaties als deze opnemen:

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

Resultaat:

 Music
 Live Music
 Player 456
 007

En we kunnen het volgende gebruiken om alle rijen op te nemen die bevatten tekens uit ons assortiment (zelfs als ze ook tekens buiten dit bereik bevatten):

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

Resultaat:

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


  1. Wat is het langst mogelijke wereldwijde telefoonnummer dat ik zou moeten overwegen in SQL varchar(lengte) voor telefoon?

  2. Afbeelding ophalen uit database in asp.net

  3. Een back-up maken van MySQL-databases met AutoMySQLBackup

  4. ROW_NUMBER() in MySQL