Hier sind vier Optionen zum Zurückgeben von Zeilen, die Großbuchstaben 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:Vergleich mit einer POSIX-Zeichenklasse
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 [:upper:]
verwenden POSIX-Zeichenklasse zum Prüfen auf Großbuchstaben:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:upper:]]');
Ergebnis:
CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
Option 2:Mit LOWER()
vergleichen Zeichenkette
Wir können den LOWER()
verwenden Funktion, um den ursprünglichen Wert mit seinem Äquivalent in Kleinbuchstaben zu vergleichen:
SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;
Ergebnis:
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 Oracle eine Suche mit Berücksichtigung der Groß-/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 Großbuchstaben enthält, den wir abgleichen möchten:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');
Ergebnis:
CAFÉ Café eCafé James Bond 007 JB 007
Das 'c'
gibt die Übereinstimmung zwischen Groß- und Kleinschreibung und Akzenten an, 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 Großbuchstaben 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é eCafé James Bond 007 JB 007 É É 123 Ø
Option 4:Mit einem Zeichenbereich 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é eCafé James Bond 007 JB 007