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:
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!