PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

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

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