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

Regulärer Ausdruck in der PostgreSQL LIKE-Klausel

Wie @a_horse kommentierte, müssten Sie den regulären Ausdrucksoperator ~ verwenden um Klammerausdrücke zu verwenden.
Aber es gibt noch mehr. Ich schlage vor:

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

^ ... Übereinstimmung am Anfang der Zeichenfolge (Ihr ursprünglicher Ausdruck könnte an beliebigen übereinstimmen Position).
[^0] ... ein Klammerausdruck (Zeichenklasse), der auf beliebig passt Zeichen, das nicht 0 ist .

Oder besser , dennoch:

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

Wieso den? LIKE ist nicht so leistungsfähig, aber normalerweise schneller als reguläre Ausdrücke. Wahrscheinlich geht es wesentlich schneller, die Kandidatenmenge mit einem billigen LIKE einzugrenzen Ausdruck.

Im Allgemeinen würden Sie NOT LIKE '__0' verwenden , aber da wir bereits LIKE '00%' festlegen im anderen Prädikat können wir das schmalere (günstigere) Muster NOT LIKE '000' verwenden .

Postgres kann einen einfachen btree Index verwenden für die links verankerten Ausdrücke value LIKE '00%' (wichtig für große Tabellen), während dies für einen komplexeren regulären Ausdruck möglicherweise nicht funktioniert. Die neueste Version von Postgres kann Indizes für einfache reguläre Ausdrücke verwenden, also möglicherweise Arbeit für dieses Beispiel. Einzelheiten:

  • Unterschied zwischen LIKE und ~ in Postgres