Mysql
 sql >> Datenbank >  >> RDS >> Mysql

2 Möglichkeiten, Zeilen zurückzugeben, die alphanumerische Zeichen in MySQL enthalten

Unten sind zwei Möglichkeiten, um die Zeilen zu finden, die alphanumerische Zeichen in MySQL enthalten.

Alphanumerische Zeichen sind alphabetische Zeichen und numerische Zeichen.

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:]

Wir können MySQLs REGEXP verwenden -Operator, um unsere Spalte mit einem regulären Ausdruck zu vergleichen.

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 unseren regulären Ausdrücken, um die Zeilen zu finden, die alphanumerische Zeichen enthalten.

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[[:alnum:]]+$';

Ergebnis:

+-------+
| c1    |
+-------+
| Music |
| Café  |
| 007   |
| é     |
| É     |
| ø     |
+-------+

Dadurch wurden nur die Zeilen zurückgegeben, die nur alphanumerische Zeichen enthalten. Wenn eine Zeile sowohl alphanumerische als auch nicht-alphanumerische Zeichen enthält, wird sie nicht zurückgegeben.

Das Leerzeichen wird als nicht alphanumerisch betrachtet, und wenn wir also Leerzeichen einfügen möchten, können wir dies tun:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[[:alnum:] ]+$';

Ergebnis:

+---------------+
| c1            |
+---------------+
| Music         |
| Live Music    |
| Café          |
| Café Del Mar  |
| 100 Cafés     |
| Player 456    |
| 007           |
| é             |
| É             |
| é 123         |
| ø             |
| ø 123         |
+---------------+

Um alle Zeilen zurückzugeben, die enthalten alphanumerische Zeichen (auch wenn die Zeile auch nicht-alphanumerische Zeichen enthält), können wir Folgendes tun:

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

Ergebnis:

+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é                 |
| É                 |
| é 123             |
| ø                 |
| ø 123             |
+-------------------+

Option 2:Geben Sie einen Zeichenbereich an

Eine andere Möglichkeit besteht darin, einen regulären Ausdruck bereitzustellen, der eine Reihe von Zeichen bereitstellt. Wir können immer noch den REGEXP verwenden Operator, um dies zu tun.

Beispiel:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9]+$';

Ergebnis:

+-------+
| c1    |
+-------+
| Music |
| 007   |
+-------+

Dadurch wurden weniger Zeilen zurückgegeben als bei unserem ersten Beispiel. Das liegt daran, dass ich den é nicht eingefügt habe , É , oder ø Zeichen in meinem Bereich, und daher werden alle Zeilen, die diese Zeichen enthalten, von der Ausgabe ausgeschlossen.

Daher müssen Sie bei der Verwendung dieser Methode vorsichtig sein, falls Sie versehentlich Zeichen ausschließen, die Sie einschließen sollten.

Um diesen Bereich beizubehalten, können wir jedoch Leerzeichen wie diese einfügen:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9 ]+$';

Ergebnis:

+------------+
| c1         |
+------------+
| Music      |
| Live Music |
| Player 456 |
| 007        |
+------------+

Und wir können Folgendes verwenden, um alle Zeilen einzuschließen, die enthalten Zeichen aus unserem Bereich (auch wenn sie auch Zeichen außerhalb dieses Bereichs enthalten):

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

Ergebnis:

+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é 123             |
| ø 123             |
+-------------------+

Alternativen zu REGEXP

In MySQL ist das RLIKE und REGXP Operatoren sind Synonyme für REGEXP_LIKE() . Daher können wir jedes der vorherigen Beispiele durch RLIKE ersetzen oder REGEXP_LIKE() .

Beispiel für RLIKE :

SELECT c1 FROM t1 
WHERE c1 RLIKE '^[[:alnum:]]+$';

Beispiel für REGEXP_LIKE() :

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[[:alnum:]]+$');