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