sql >> Database >  >> RDS >> PostgreSQL

2 manieren om rijen te retourneren die niet-alfanumerieke tekens bevatten in PostgreSQL

Hieronder staan ​​twee opties voor het retourneren van rijen die alleen niet-alfanumerieke tekens bevatten in PostgreSQL.

Niet-alfanumerieke tekens omvatten leestekens zoals [email protected]#&()–[{}]:;',?/* en symbolen zoals `~$^+=<>“ , evenals witruimtetekens zoals de spatie of tabtekens.

Voorbeeldgegevens

We gebruiken de volgende gegevens voor onze voorbeelden:

SELECT c1 FROM t1;

Resultaat:

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

Optie 1:Vergelijk met [:alnum:]

We kunnen PostgreSQL's !~ . gebruiken operator om onze kolom te vergelijken met een reguliere expressie. We gebruiken deze operator wanneer we willen specificeren dat de waarde niet overeenkomt met de reguliere expressie.

De reguliere expressiemogelijkheid van MySQL omvat ondersteuning voor de POSIX-tekenklassen. Daarom kunnen we de [:alnum:] . gebruiken POSIX-tekenklasse in onze reguliere expressie.

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

Resultaat:

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

De lege tekenreeks is ook numeriek, en dus retourneerde dat voorbeeld de rij die de lege tekenreeks bevat.

We kunnen lege strings uitsluiten door NULLIF() . te gebruiken :

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

Resultaat:

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

Optie 2:specificeer een reeks tekens

Een andere manier om dit te doen, is door een reeks tekens in uw reguliere expressie op te geven.

Voorbeeld:

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

Resultaat:

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

En om de lege string te verwijderen:

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

Resultaat:

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

In dit geval omvatte mijn uitsluitingsbereik geen alfanumerieke tekens zoals é , É , en ø , en dus is de uitvoer geen echte weergave van niet-alfanumerieke tekens. Dat gezegd hebbende, deze methode geeft je in ieder geval de mogelijkheid om de exacte tekens op te geven die je wilt opnemen in of uitsluiten van het resultaat.


  1. PL/pgSQL anoniem codeblok

  2. Hoe de LIKE-operator werkt in SQLite

  3. Hoe alle primaire sleutels uit alle tabellen in de SQL Server-database te verwijderen - SQL Server / TSQL-zelfstudie, deel 65

  4. Belangrijke gezondheidscontroles voor uw MySQL Source-Replica-servers