Hier sind vier Optionen zum Zurückgeben von Zeilen, die Kleinbuchstaben in Oracle Database enthalten.
Beispieldaten
Angenommen, wir haben eine Tabelle mit den folgenden Daten:
SELECT c1 FROM t1;
Ergebnis:
CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 É É 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
REGEXP_LIKE
von Oracle Bedingung entspricht dem POSIX-Standard für reguläre Ausdrücke und den Unicode-Richtlinien für reguläre Ausdrücke. Wir können daher den [:lower:]
verwenden POSIX-Zeichenklasse zum Prüfen auf Kleinbuchstaben:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:lower:]]');
Ergebnis:
Café café 1café eCafé James Bond 007 é é 123 ø
Option 2:Vergleiche mit UPPER()
Zeichenkette
Wir können den UPPER()
verwenden Funktion, um den ursprünglichen Wert mit seinem Äquivalent in Großbuchstaben zu vergleichen:
SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Ergebnis:
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 Äquivalenten 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 Oracle eine Suche mit Berücksichtigung der Groß- und Kleinschreibung durch, sodass ich nichts weiter an der Abfrage vornehmen muss, um die Groß-/Kleinschreibung zu beachten.
Option 3:Mit den tatsächlichen Zeichen vergleichen
Eine weitere Option ist die Verwendung des REGEXP_LIKE
Bedingung mit einem regulären Ausdrucksmuster, das explizit jeden Kleinbuchstaben enthält, den wir abgleichen möchten:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[abcdefghijklmnopqrstuvwxyz]', 'c');
Ergebnis:
Café café 1café eCafé James Bond 007
Das 'c'
spezifiziert Groß-/Kleinschreibung und Akzente beachtende Übereinstimmung, auch wenn die ermittelte Sortierung der Bedingung Groß-/Kleinschreibung oder Akzente nicht berücksichtigt.
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.
Hier ist es noch einmal mit diesen beiden Zeichen:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[éøabcdefghijklmnopqrstuvwxyz]', 'c');
Ergebnis:
Café café 1café eCafé James Bond 007 é é 123 ø
Option 4:Mit einer Reihe von Zeichen vergleichen
Eine andere Möglichkeit besteht darin, den Bereich der Großbuchstaben anzugeben, die wir abgleichen möchten:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[a-z]', 'c');
Ergebnis:
Café café 1café eCafé James Bond 007