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

4 Möglichkeiten, Zeilen zu finden, die Kleinbuchstaben in MariaDB enthalten

Hier sind vier Optionen zum Zurückgeben von Zeilen, die Kleinbuchstaben in MariaDB enthalten.

Beispieldaten

Angenommen, wir haben eine Tabelle mit den folgenden Daten:

SELECT c1 FROM t1;

Ergebnis:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| JB 007         |
| 007            |
| NULL           |
|                |
| É              |
| É 123          |
| é              |
| é 123          |
| ø              |
| Ø              |
+----------------+

Wir können die folgenden Methoden verwenden, um die Zeilen zurückzugeben, die Kleinbuchstaben enthalten.

Option 1:Mit einer POSIX-Zeichenklasse vergleichen

Wir können den REGEXP verwenden -Operator, um eine Übereinstimmung mit einem regulären Ausdrucksmuster durchzuführen.

Eine einfache Möglichkeit besteht darin, unsere Spalte mit [:lower:] zu vergleichen POSIX-Zeichenklasse:

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

Ergebnis:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

RLIKE ist ein Synonym für REGEXP , also können wir REGEXP ersetzen mit RLIKE um das gleiche Ergebnis zu erhalten:

SELECT c1 FROM t1
WHERE c1 RLIKE '[[:lower:]]';

Option 2:Vergleiche mit UPPER() Zeichenkette

Eine andere Möglichkeit ist die Verwendung von UPPER() Funktion, um den ursprünglichen Wert mit seinem Äquivalent in Großbuchstaben zu vergleichen:

SELECT c1 FROM t1
WHERE BINARY UPPER(c1) <> BINARY c1;

Ergebnis:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

Durch die Verwendung von ungleich (<> ) Operator (Sie können alternativ != verwenden statt <> Wenn Sie möchten), geben wir nur die Zeilen zurück, die sich von ihren Entsprechungen in Großbuchstaben unterscheiden. Der Grund dafür ist, dass, wenn ein Wert mit seinem Äquivalent in Großbuchstaben identisch ist, er bereits von Anfang an in Großbuchstaben war (und wir ihn nicht zurückgeben möchten).

Standardmäßig führt MariaDB eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durch, daher verwende ich den BINARY Operator, um eine Suche mit Berücksichtigung der Groß-/Kleinschreibung zu erhalten.

Das geht auch so:

SELECT c1 FROM t1
WHERE BINARY(UPPER(c1)) <> BINARY(c1);

Option 3:Mit den tatsächlichen Zeichen vergleichen

Eine andere Möglichkeit ist die Verwendung des REGEXP Operator mit einem regulären Ausdrucksmuster, das explizit alle Kleinbuchstaben enthält, die wir abgleichen möchten:

SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[abcdefghijklmnopqrstuvwxyz]';

Ergebnis:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+

Diesmal werden weniger Zeilen zurückgegeben als in den vorherigen Beispielen. Das liegt daran, dass ich keine Zeichen wie é angegeben habe und ø , die in diesen Beispielen zurückgegeben wurden. Unser Ergebnis enthält é aber diese Zeile wurde nur zurückgegeben, weil sie auch andere Kleinbuchstaben enthält, die tun übereinstimmen.

Daher müssen Sie sicherstellen, dass alle gültigen Zeichen abgedeckt sind, wenn Sie diese Option verwenden.

Option 4:Mit einer Reihe von Zeichen vergleichen

Eine andere Möglichkeit besteht darin, den Zeichenbereich anzugeben, den wir abgleichen möchten:

SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[a-z]';

Ergebnis:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+