Nedan finns två metoder för att returnera rader som endast innehåller alfanumeriska tecken i PostgreSQL.
Alfanumeriska tecken är alfabetiska tecken och numeriska tecken.
Exempeldata
Vi använder följande data för våra exempel:
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
Alternativ 1:Jämför med [:alnum:]
Vi kan använda PostgreSQL:s ~
operator för att jämföra värdet med ett reguljärt uttryck.
PostgreSQL:s kapacitet för reguljära uttryck inkluderar stöd för POSIX-teckenklasserna. Därför kan vi använda [:alnum:]
POSIX-teckenklass i våra reguljära uttryck för att hitta de rader som innehåller alfanumeriska tecken.
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:]]+$';
Resultat:
Music Café 007 é É ø
Det returnerar bara de värden som enbart består av alfanumeriska tecken. Om en rad innehåller både alfanumeriska och icke-alfanumeriska tecken, returneras den inte.
Observera att mellanslagstecknet anses vara icke-alfanumeriskt, så om vi vill inkludera mellanslag kan vi göra detta:
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:] ]+$';
Resultat:
Music Live Music Café Café Del Mar 100 Cafés Player 456 007 é É é 123 ø ø 123
För att returnera alla rader som innehåller alfanumeriska tecken (även om raden också innehåller icke-alfanumeriska tecken), kan vi göra detta:
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
Alternativ 2:Ange ett antal tecken
Ett annat sätt att göra det är att ange ett antal tecken inom det reguljära uttrycket.
Exempel:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9]+$';
Resultat:
Music 007
Du kommer att märka att detta gav färre rader än med vårt första exempel. Det beror på att jag inte inkluderade é
, É
, eller ø
tecken i mitt intervall, så alla rader som innehåller dessa tecken exkluderas från utdata.
Därför lönar det sig att vara extra uppmärksam när du använder denna metod. Det skulle vara lätt att av misstag utesluta tecken som du borde inkludera.
Men med detta intervall kan vi inkludera utrymmen som detta:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9 ]+$';
Resultat:
Music Live Music Player 456 007
Och vi kan använda följande för att inkludera alla rader som innehåller tecken från vårt intervall (även om de också innehåller tecken utanför detta intervall):
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