Schreiben von Abfragen ohne Berücksichtigung der Groß-/Kleinschreibung in PostgreSQL

Bilal Shahid 15 Februar 2024
  1. Verwenden Sie PATTERN MATCHING in PostgreSQL
  2. Verwenden Sie die Funktion LOWER, um Fälle beim Suchen in PostgreSQL ähnlich zu machen
  3. die Verwendung von CASE CONVERSION in PostgreSQL
  4. Verwenden Sie CITEXT beim Erstellen einer Tabelle, um CASE-INSENSITIVE-Matching in PostgreSQL durchzuführen
Schreiben von Abfragen ohne Berücksichtigung der Groß-/Kleinschreibung in PostgreSQL

Beim Schreiben einer Abfrage in unserem DBMS stellen wir oft fest, dass einige Zeichen möglicherweise in Groß- oder Kleinbuchstaben geschrieben werden müssen, abhängig von den Bedingungen, die erforderlich sind, um eine Klausel oder Syntax zu erfüllen. Folglich muss ungeachtet der Umstände ein Verfahren zum Vervollständigen von Abfragen und zum Vermeiden allgemeiner Syntaxfehler gefunden werden.

In diesem Artikel wird erläutert, wie Sie Abfragen ohne Berücksichtigung der Groß-/Kleinschreibung in PostgreSQL schreiben.

Verwenden Sie PATTERN MATCHING in PostgreSQL

Eine der Möglichkeiten, Abfragen in PostgreSQL zu optimieren, bei denen wir versuchen, etwas in unserer Datenbank zu finden, und es mit einer bestimmten Zeichenfolge versehen müssen, die zusammen mit den enthaltenen Objekten übereinstimmt, müssen wir möglicherweise die gleichen Groß- und Kleinschreibung verwenden, die wir dafür verwendet haben Objekt beim Suchen.

Dies könnte zu Problemen führen, wenn wir die genaue Syntax des Objektnamens vergessen haben, als er früher definiert wurde.

Hier können wir etwas so Einfaches wie PATTERN MATCHING verwenden. Wir haben eine Tabelle TIER mit ID, ALTER und TYP.

Die Tabelle enthält bereits folgende Daten:

       ID     AGE   TYPE
1     2 12   "Horse"
2     1 3    "Cat"
3     3 4    "Kitten"

Wir können die folgende Abfrage verwenden, um alle TIERE mit dem Typ KÄTZCHEN zu finden.

Anfrage:

select * from ANIMAL where type = 'Kitten';

Ausgang:

Verwenden Sie PATTERN MATCHING in PostgreSQL

Wenn wir jedoch die folgende Abfrage schreiben:

select * from ANIMAL where type = 'kitten';

Dann erhalten wir nichts in unserem Ergebnis, und das passiert, weil das Zeichen 'k' nicht gleich 'K' ist. Um dies zu lösen, können wir den ILIKE-Operator verwenden, um die Groß-/Kleinschreibung zu ignorieren.

Anfrage:

select * from ANIMAL where type ILIKE 'kitten';

Diese Abfrage gibt alle Tiere zurück, die vom Typ KITTEN sind. Eine Modifikation dieses Codes kann der Zeichenoperator sein, der alternativ mit ILIKE verwendet werden kann.

Anfrage:

select * from ANIMAL where type ~~* 'kitten';

Eine andere Methode, die wir verwenden können, ist der Operator LIKE oder SIMILAR TO, aber sie können nur verwendet werden, wenn wir uns die Teile des Namens mit ihren richtigen Groß- und Kleinschreibung merken.

Um zum Beispiel nach KÄTZCHEN zu suchen, wenn wir uns erinnern, dass unser Name ITTEN klein war und K entweder KLEIN oder GROS war, können wir etwas wie folgt schreiben, um das Ergebnis abzufragen.

Anfrage:

select * from ANIMAL where type similar to '%itten';

Dies ist keine gute Alternative und sollte verwendet werden, wenn der Benutzer eine Vorstellung von der beim Erstellen von Objekten verwendeten Namenskonvention hat. ILIKE bietet eine bessere Handhabung der Groß-/Kleinschreibung, wenn die Muster mit der bereitgestellten Zeichenfolge abgeglichen werden.

Verwenden Sie die Funktion LOWER, um Fälle beim Suchen in PostgreSQL ähnlich zu machen

Eine sehr effiziente Möglichkeit, ein Muster mit einer Zeichenfolge abzugleichen, besteht darin, die Zeichen in beiden ähnlich zu machen. Entweder indem Sie alle Zeichen in LOWER oder UPPER umwandeln und dann entsprechend anpassen.

PostgreSQL stellt uns zur Überprüfung eine Funktion LOWER() sowie UPPER() zur Verfügung.

Anfrage:

select * from ANIMAL where lower(type) = lower('kitten')

oder

select * from ANIMAL where lower(type) = lower('kitten')

Ausgang:

Verwenden Sie die Funktion LOWER, um Fälle beim Suchen in PostgreSQL ähnlich zu machen

In ähnlicher Weise können wir INITCAP verwenden, um nur den Anfangsbuchstaben unseres Musters und unserer Zeichenfolge groß zu schreiben und den Rest in Kleinbuchstaben, um ihn abzugleichen und zu überprüfen.

Anfrage:

select * from ANIMAL where initcap(type) = initcap('kitten')

die Verwendung von CASE CONVERSION in PostgreSQL

INDEXES ON EXPRESSIONS in PostgreSQL beschleunigt die Abfrage von Ergebnissen aus einer großen Tabelle. Anstatt dieselbe Abfrage wiederholt für eine Tabelle aufzurufen, was zu mehr Zeit führt, können wir sie indizieren und dann bei einer Abfrage verwenden.

Denken Sie daran, dass CASE CONVERSIONS bereits vorhandene INDEXES ungültig machen können, da sie möglicherweise erneut aktualisiert werden müssen. Wir können die folgenden Abfragen schreiben, um einen Index für dieses CASE MATCHING zu erstellen.

Anfrage:

create index lower_col on ANIMAL (lower(type));

oder

create index upper_col on ANIMAL (upper(type));

Und analog auch für INITCAP. Diese INDEXES können sogar verwendet werden, um Einschränkungen für ROW INSERTION festzulegen, wo ein Datensatz mit einem anderen CASE INSERTED ist und bei Duplizierung ungültig gemacht werden kann.

Um LIKE- und ILIKE-Abfragen zu beschleunigen, können wir GIN- oder GIST-Indizes mit einer PG_TRGM_EXTENSION verwenden.

Verwenden Sie CITEXT beim Erstellen einer Tabelle, um CASE-INSENSITIVE-Matching in PostgreSQL durchzuführen

Eine weitere Alternative zum üblichen Abgleich in PostgreSQL ist die Verwendung der CITEXT-Klausel. Es ruft intern LOWER() auf, wenn Werte verglichen werden, anstatt dass der Benutzer jedes Mal LOWER() eingibt, wenn er versucht, eine Zeichenfolge mit einem Muster abzugleichen.

Erstellen wir die Tabelle ANIMAL mit der Spalte TYPE als CITEXT.

create extension CITEXT; --creating the extension first

create table ANIMAL(
    id INT PRIMARY KEY,
    age INT,
    TYPE CITEXT
)

Dann EINFÜGEN Sie dieselben Werte aus der vorherigen Tabelle. Verwenden Sie nun die folgende Abfrage, um ein Ergebnis zurückzugeben.

select * from ANIMAL where type = 'kitten';

Wir können sehen, dass die Verwendung von CITEXT in unseren Spalten kostengünstiger, effizienter und schneller ist als viele der oben genannten Lösungen. CITEXT hängt von der LC_CTYPE-Einstellung der Datenbank ab und kann nach Ihren Bedürfnissen modifiziert werden.

Hier sind einige wichtige Punkte zu den CASE CONVERSIONS vor dem Matching.

  1. Fälle können nicht in andere Sprachen konvertiert werden (außer Englisch).
  2. Die Funktionen LOWER() und UPPER() sind langsamer, da keine Indizierung erfolgt.

Dies sind all die verschiedenen Möglichkeiten, Zeichenfolgen mit Mustern in PostgreSQL zu vergleichen.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Verwandter Artikel - PostgreSQL Query