sql >> Databasteknik >  >> RDS >> PostgreSQL

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

Nedan finns två alternativ för att returnera rader som endast innehåller icke-alfanumeriska tecken i PostgreSQL.

Icke-alfanumeriska tecken inkluderar skiljetecken som [email protected]#&()–[{}]:;',?/* och symboler som `~$^+=<>“ , såväl som blanksteg som blanksteg eller tabbtecken.

Exempeldata

Vi använder följande data för våra exempel:

SELECT c1 FROM t1;

Resultat:

+----------------------+
| c1                   |
+----------------------+
| 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 !~ operatorn för att jämföra vår kolumn med ett reguljärt uttryck. Vi använder den här operatorn när vi vill ange att värdet inte matchar det reguljära uttrycket.

MySQL: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årt reguljära uttryck.

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

Resultat:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 

Den tomma strängen är också numerisk, så exemplet returnerade raden som innehåller den tomma strängen.

Vi kan exkludera tomma strängar genom att använda NULLIF() :

SELECT c1 FROM t1 
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';

Resultat:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“

Alternativ 2:Ange ett antal tecken

Ett annat sätt att göra det är att ange ett antal tecken i ditt reguljära uttryck.

Exempel:

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

Resultat:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 
 é
 É
 ø

Och för att ta bort den tomma strängen:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]';

Resultat:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 
 é
 É
 ø

I det här fallet täckte inte mitt uteslutningsintervall alfanumeriska tecken som é , É och ø , och så utdata är inte en sann representation av icke-alfanumeriska tecken. Som sagt, åtminstone den här metoden ger dig möjlighet att ange exakt de tecken du vill inkludera eller utesluta från resultatet.


  1. Ta bort med Gå med i MySQL

  2. MySQL-skärning närmar sig?

  3. Alfanumerisk sortering med PostgreSQL

  4. Hur man avinstallerar SQL Server Management Studio(SSMS) - SQL Server/TSQL Tutorial Del 23.1