PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

2 façons de renvoyer des lignes contenant des caractères non alphanumériques dans PostgreSQL

Vous trouverez ci-dessous deux options pour renvoyer des lignes qui ne contiennent que des caractères non alphanumériques dans PostgreSQL.

Les caractères non alphanumériques incluent les caractères de ponctuation tels que [email protected]#&()–[{}]:;',?/* et des symboles comme `~$^+=<>“ , ainsi que des caractères d'espacement tels que les espaces ou les tabulations.

Exemple de données

Nous utiliserons les données suivantes pour nos exemples :

SELECT c1 FROM t1;

Résultat :

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

Option 1 : Comparer avec [:alnum:]

Nous pouvons utiliser le !~ de PostgreSQL opérateur pour comparer notre colonne à une expression régulière. Nous utilisons cet opérateur lorsque nous voulons spécifier que la valeur ne correspond pas à l'expression régulière.

La capacité d'expression régulière de MySQL inclut la prise en charge des classes de caractères POSIX. Par conséquent, nous pouvons utiliser le [:alnum:] Classe de caractères POSIX dans notre expression régulière.

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

Résultat :

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

La chaîne vide est également numérique, et cet exemple a donc renvoyé la ligne contenant la chaîne vide.

Nous pouvons exclure les chaînes vides en utilisant NULLIF() :

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

Résultat :

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

Option 2 :Spécifiez une plage de caractères

Une autre façon de procéder consiste à spécifier une plage de caractères dans votre expression régulière.

Exemple :

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

Résultat :

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

Et pour supprimer la chaîne vide :

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

Résultat :

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

Dans ce cas, ma plage d'exclusion ne couvrait pas les caractères alphanumériques comme é , É , et ø , et la sortie n'est donc pas une représentation fidèle des caractères non alphanumériques. Cela dit, au moins cette méthode vous donne la possibilité de spécifier les caractères exacts que vous souhaitez inclure ou exclure du résultat.