PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

2 Möglichkeiten zum Zurückgeben von Zeilen, die nicht-alphanumerische Zeichen in PostgreSQL enthalten

Nachfolgend finden Sie zwei Optionen zum Zurückgeben von Zeilen, die in PostgreSQL nur nicht-alphanumerische Zeichen enthalten.

Nicht-alphanumerische Zeichen umfassen Satzzeichen wie [email protected]#&()–[{}]:;',?/* und Symbole wie `~$^+=<>“ , sowie Whitespace-Zeichen wie Leerzeichen oder Tabulatorzeichen.

Beispieldaten

Wir verwenden die folgenden Daten für unsere Beispiele:

SELECT c1 FROM t1;

Ergebnis:

+----------------------+
| 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:Vergleiche mit [:alnum:]

Wir können PostgreSQLs !~ verwenden -Operator, um unsere Spalte mit einem regulären Ausdruck zu vergleichen. Wir verwenden diesen Operator, wenn wir angeben möchten, dass der Wert nicht mit dem regulären Ausdruck übereinstimmt.

Die Funktion für reguläre Ausdrücke von MySQL umfasst die Unterstützung der POSIX-Zeichenklassen. Daher können wir den [:alnum:] verwenden POSIX-Zeichenklasse in unserem regulären Ausdruck.

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

Ergebnis:

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

Die leere Zeichenfolge ist ebenfalls num-numerisch, sodass dieses Beispiel die Zeile zurückgegeben hat, die die leere Zeichenfolge enthält.

Wir können leere Zeichenfolgen ausschließen, indem wir NULLIF() verwenden :

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

Ergebnis:

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

Option 2:Geben Sie einen Zeichenbereich an

Eine andere Möglichkeit besteht darin, einen Bereich von Zeichen in Ihrem regulären Ausdruck anzugeben.

Beispiel:

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

Ergebnis:

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

Und um die leere Zeichenfolge zu entfernen:

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

Ergebnis:

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

In diesem Fall umfasste mein Ausschlussbereich keine alphanumerischen Zeichen wie é , É , und ø , und daher ist die Ausgabe keine echte Darstellung von nicht-alphanumerischen Zeichen. Allerdings gibt Ihnen diese Methode zumindest die Möglichkeit, die genauen Zeichen anzugeben, die Sie in das Ergebnis einbeziehen oder aus diesem ausschließen möchten.