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

4 Möglichkeiten, Zeilen zu finden, die Großbuchstaben in Oracle enthalten

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