Hier sind vier Optionen zum Zurückgeben von Zeilen, die in MariaDB Großbuchstaben 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 Großbuchstaben 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 [:upper:]
zu vergleichen POSIX-Zeichenklasse:
SELECT c1 FROM t1
WHERE c1 REGEXP '[[:upper:]]';
Ergebnis:
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 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 '[[:upper:]]';
Option 2:Vergleiche mit LOWER()
Zeichenkette
Eine andere Möglichkeit ist die Verwendung von LOWER()
Funktion, um den ursprünglichen Wert mit seinem Äquivalent in Kleinbuchstaben zu vergleichen:
SELECT c1 FROM t1
WHERE BINARY LOWER(c1) <> BINARY c1;
Ergebnis:
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 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 Kleinbuchstaben-Äquivalenten unterscheiden. Der Grund dafür ist, dass, wenn ein Wert mit seinem kleingeschriebenen Äquivalent identisch ist, er bereits von Anfang an kleingeschrieben 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(LOWER(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 jeden Großbuchstaben enthält, den wir abgleichen möchten:
SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';
Ergebnis:
+----------------+ | c1 | +----------------+ | CAFÉ | | Café | | eCafé | | James Bond 007 | | JB 007 | +----------------+
Diesmal werden weniger Zeilen zurückgegeben als in den vorherigen Beispielen. Das liegt daran, dass ich keine Zeichen wie É
angegeben habe und Ø
, die im vorherigen Beispiel zurückgegeben wurden. Unser Ergebnis enthält É
aber diese Zeile wurde nur zurückgegeben, weil sie auch andere Großbuchstaben 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é | | eCafé | | James Bond 007 | | JB 007 | +----------------+