sql >> Database teknologi >  >> RDS >> PostgreSQL

2 måder at returnere rækker, der indeholder ikke-alfanumeriske tegn i PostgreSQL

Nedenfor er to muligheder for at returnere rækker, der kun indeholder ikke-alfanumeriske tegn i PostgreSQL.

Ikke-alfanumeriske tegn inkluderer tegnsætningstegn såsom [email protected]#&()–[{}]:;',?/* og symboler som `~$^+=<>“ , såvel som mellemrumstegn som mellemrum eller tabulatortegn.

Eksempel på data

Vi bruger følgende data til vores eksempler:

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                |
+----------------------+

Mulighed 1:Sammenlign med [:alnum:]

Vi kan bruge PostgreSQL's !~ operator for at sammenligne vores kolonne med et regulært udtryk. Vi bruger denne operator, når vi ønsker at angive, at værdien ikke matcher det regulære udtryk.

MySQLs regulære udtryksevne inkluderer understøttelse af POSIX-tegnklasserne. Derfor kan vi bruge [:alnum:] POSIX-tegnklasse i vores regulære udtryk.

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

Resultat:

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

Den tomme streng er også numerisk, og det eksempel returnerede derfor den række, der indeholder den tomme streng.

Vi kan ekskludere tomme strenge ved at bruge NULLIF() :

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

Resultat:

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

Mulighed 2:Angiv en række af tegn

En anden måde at gøre det på er at angive en række tegn i dit regulære udtryk.

Eksempel:

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

Resultat:

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

Og for at fjerne den tomme streng:

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

Resultat:

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

I dette tilfælde dækkede mit ekskluderingsområde ikke alfanumeriske tegn som é , É og ø , og outputtet er derfor ikke en sand repræsentation af ikke-alfanumeriske tegn. Når det er sagt, giver denne metode dig i det mindste mulighed for at angive de nøjagtige tegn, du vil inkludere eller udelukke fra resultatet.


  1. Hvordan får man adgang til fjernserver med lokal phpMyAdmin-klient?

  2. hvordan man genopretter standby-database fra en manglende arkivlog

  3. Sådan trækker du timer fra en dato-tidsværdi i MariaDB

  4. 2 måder at slette duplikerede rækker i MariaDB (ignorerer primærnøgle)