sql >> Databasteknik >  >> RDS >> PostgreSQL

2 sätt att returnera rader som endast innehåller alfanumeriska tecken i PostgreSQL

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


  1. SQL Server Texttyp kontra varchar datatyp

  2. Hur sp_describe_first_result_set fungerar i SQL Server

  3. Jämföra Galera Cluster Cloud-erbjudanden:Del ett Amazon AWS

  4. SQLAlchemy PÅ DUBLIKATNYCKELUPPDATERING