Heim >Datenbank >MySQL-Tutorial >Wie können reguläre Ausdrücke den Mustervergleich in der LIKE-Klausel von PostgreSQL verbessern?

Wie können reguläre Ausdrücke den Mustervergleich in der LIKE-Klausel von PostgreSQL verbessern?

Linda Hamilton
Linda HamiltonOriginal
2024-12-20 14:44:12625Durchsuche

How Can Regular Expressions Improve Pattern Matching in PostgreSQL's LIKE Clause?

Reguläre Ausdrücke in der PostgreSQL-LIKE-Klausel

In PostgreSQL wird die LIKE-Klausel häufig für den Mustervergleich bei Zeichenfolgenvergleichen verwendet. Allerdings können auch reguläre Ausdrücke verwendet werden, um die Flexibilität der LIKE-Klausel zu erhöhen. Sehen wir uns ein häufiges Szenario an, in dem sich die Verwendung regulärer Ausdrücke als vorteilhaft erweisen kann.

Das Problem:

Betrachten Sie den folgenden Abfrageausschnitt:

SELECT * FROM table WHERE value LIKE '00[1-9]%'
-- (third character should not be 0)

Ziel dieser Abfrage ist es, Zeilen abzurufen, in denen die Wertespalte mit „00“ beginnt, gefolgt von einer Ziffer zwischen 1 und 9 (aber nicht 0), gefolgt von einer beliebigen Zahl von Charakteren. Die Abfrage stimmt jedoch nicht mit der beabsichtigten Zeichenfolge „0090D0DF143A“ überein.

Die Lösung:

Um dieses Problem zu lösen, verwenden Sie den regulären Ausdrucksoperator ~ sollte anstelle des LIKE-Operators verwendet werden. Darüber hinaus kann der reguläre Ausdruck selbst geändert werden, um das gewünschte Verhalten zu erreichen:

SELECT * FROM tbl WHERE value ~ '^00[^0]'

In diesem Ausdruck:

  • ^ ... entspricht dem Anfang der Zeichenfolge
  • 1 ... stimmt mit jedem Zeichen überein, das es nicht ist 0

Best Practice:

Alternativ wird die folgende Abfrage mit mehreren LIKE-Ausdrücken sowohl zur Übersichtlichkeit als auch zur Leistungsoptimierung empfohlen:

SELECT *
FROM tbl
WHERE value LIKE '00%'       -- starting with '00'
AND value NOT LIKE '000%'  -- third character is not '0'

Die Verwendung von LIKE- und NOT LIKE-Klauseln sorgt für Effizienz, indem die Kandidatenmenge mithilfe des weniger komplexen LIKE-Ausdrucks eingegrenzt wird, bevor der teurere reguläre Ausdruck angewendet wird Negation.

Beachten Sie, dass Indizes verwendet werden können, um Abfragen mit einfachen regulären Ausdrücken wie dem in diesem Beispiel zu beschleunigen. Ausführlichere Informationen finden Sie in der PostgreSQL-Dokumentation zum Unterschied zwischen LIKE und ~.


    Das obige ist der detaillierte Inhalt vonWie können reguläre Ausdrücke den Mustervergleich in der LIKE-Klausel von PostgreSQL verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn