Oracle
 sql >> Datenbank >  >> RDS >> Oracle

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

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