Hier sind vier Optionen zum Zurückgeben von Zeilen, die in PostgreSQL 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:Vergleich mit einer POSIX-Zeichenklasse
Wir können den ~
verwenden -Operator, um einen Vergleich zwischen Groß- und Kleinschreibung eines regulären Ausdrucksmusters durchzuführen. Das Muster kann so einfach oder komplex sein, wie wir möchten.
Eine einfache Möglichkeit besteht darin, unsere Spalte mit [:upper:]
zu vergleichen POSIX-Zeichenklasse:
SELECT c1 FROM t1
WHERE c1 ~ '[[:upper:]]';
Ergebnis:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
Option 2:Mit LOWER()
vergleichen 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 LOWER(c1) <> 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 PostgreSQL eine Übereinstimmung mit der Groß-/Kleinschreibung durch, sodass wir keine Sortierung mit Berücksichtigung der Groß-/Kleinschreibung angeben müssen, um das gewünschte Ergebnis zu erhalten.
Option 3:Mit den tatsächlichen Zeichen vergleichen
Eine weitere Option ist die Verwendung von dem ~
Operator mit einem regulären Ausdrucksmuster, das explizit jeden Großbuchstaben enthält, den wir abgleichen möchten:
SELECT c1 FROM t1
WHERE c1 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';
Ergebnis:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007
In diesem Fall 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 ist diese Option eingeschränkter als die vorherige, bietet Ihnen jedoch mehr Kontrolle über die Zeichen, die Sie abgleichen möchten.
Option 4:Mit einem Zeichenbereich vergleichen
Wir können alternativ den Zeichenbereich angeben, den wir abgleichen möchten:
SELECT c1 FROM t1
WHERE c1 ~ '[A-Z]';
Ergebnis:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007