Reguläre Ausdrücke in PostgreSQL-LIKE-Klausel: Verwendung von LIKE vs. ~-Operator
In PostgreSQL können Sie reguläre Ausdrücke verwenden, um nach bestimmten Mustern zu suchen innerhalb von Daten. Wenn Sie jedoch auf Probleme mit Ihren Ausdrücken stoßen, ist es wichtig, die Nuancen und Einschränkungen zu verstehen.
Die Herausforderung: Drittes Zeichen stimmt nicht überein
Bedenken Sie die folgende Abfrage :
SELECT * FROM table WHERE value LIKE '00[1-9]%' -- (third character should not be 0)
Trotz der Absicht, jeden Wert mit dem dritten Zeichen „0“ auszuschließen, wird diese Abfrage diese Kriterien nicht erfüllen. Stattdessen stimmt es mit jedem Wert überein, der mit „00“ beginnt.
Die Lösung: Verwendung des ~-Operators
Um Klammerausdrücke effektiv zu nutzen, müssen wir den regulären Ausdrucksoperator verwenden ~:
SELECT * FROM tbl WHERE value ~ '^00[^0]'
^ ... bezeichnet den Anfang der Zeichenfolge und stellt sicher, dass das Muster nur an der Stelle übereinstimmt Anfang.
1 ... stellt eine Zeichenklasse dar, die mit allem außer „0“ übereinstimmt.
Ein optimierter Ansatz
Für eine optimale Leistung sollten Sie die Abfrage in zwei LIKE-Ausdrücke aufteilen:
SELECT * FROM tbl WHERE value LIKE '00%' -- starting with '00' AND value NOT LIKE '000%' -- third character is not '0'
LIKE ist weniger wirkungsvoll als reguläre Ausdrücke, aber normalerweise schneller. Durch die Begrenzung der Kandidaten mit dem sparsamen LIKE-Ausdruck verbessern wir die allgemeine Abfragegeschwindigkeit.
Darüber hinaus ist es wichtig, links verankerte Ausdrücke wie den Wert LIKE „00 %“ zu verwenden, da diese Indizes in PostgreSQL nutzen können. Dies ist besonders bei großen Tabellen von Vorteil, während der komplexere reguläre Ausdruck möglicherweise keine Indizierung unterstützt.
Das obige ist der detaillierte Inhalt vonPostgreSQL-String-Matching: LIKE vs. ~ für effiziente Abfragen regulärer Ausdrücke?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!