MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

2 Möglichkeiten, Zeilen zurückzugeben, die nur nicht-alphanumerische Zeichen in MariaDB enthalten

Unten sind zwei Methoden zum Zurückgeben von Zeilen, die nur nicht-alphanumerische Zeichen in MariaDB 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:

CREATE TABLE t1 (
    c1 varchar(255) NULL
    );

INSERT INTO t1 VALUES
    ('Music'),
    ('Live Music'),
    ('Café'),
    ('Café Del Mar'),
    ('100 Cafés'),
    ('[email protected]'),
    ('1 + 1'),
    ('()'),
    ('[email protected]#&()–[{}]:;'',?/*'),
    ('`~$^+=<>“'),
    ('$1.50'),
    ('Player 456'),
    ('007'),
    (null),
    (''),
    ('é'),
    ('É'),
    ('é 123'),
    ('ø'),
    ('ø 123');
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:]

Die Funktion für reguläre Ausdrücke von MariaDB umfasst die Unterstützung der POSIX-Zeichenklassen. Daher können wir den [:alnum:] verwenden POSIX-Zeichenklasse in unseren regulären Ausdrücken, um die Zeilen zu finden, die nur alphanumerische Zeichen enthalten, und negieren Sie dies dann mit NOT Betreiber.

SELECT c1 FROM t1 
WHERE c1 NOT REGEXP '[[:alnum:]]';

Ergebnis:

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

Wenn Sie ein bestimmtes Zeichen ausschließen müssen, können Sie immer NULLIF() verwenden Funktion.

Lassen Sie uns beispielsweise die leere Zeichenfolge aus der letzten Zeile ausschließen:

SELECT c1 FROM t1 
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';

Ergebnis:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [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 NOT REGEXP '[A-Za-z0-9]';

Ergebnis:

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

Und um die leere Zeichenfolge zu entfernen:

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

Ergebnis:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [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.