@a_horseがコメントしたように、正規表現演算子〜
を使用する必要があります 角かっこ式を使用します。
しかし、それだけではありません。私が提案するもの:
SELECT *
FROM tbl
WHERE value ~ '^00[^0]'
^コード> ...文字列の先頭で一致します(元の式は anyで一致する可能性があります 位置)。
[^ 0]
... any に一致するブラケット式(文字クラス) 0
ではない文字 。
またはより良い 、まだ:
SELECT *
FROM tbl
WHERE value LIKE '00%' -- starting with '00'
AND value NOT LIKE '000%' -- third character is not '0'
なんで? LIKE
それほど強力ではありませんが、通常は正規表現よりも高速です。安価なLIKE
を使用して候補のセットを絞り込む方が、おそらく大幅に高速です。 表現。
通常、 NOT LIKE'__0'
を使用します 、ただし、すでに LIKE '00%'
を確立しているため 他の述語では、より狭い(より安い)パターンを使用できます NOT LIKE '000'
。
Postgresは単純なbtreeインデックスを使用できます 左アンカー式の場合valueLIKE '00%'
(大きなテーブルでは重要です)が、より複雑な正規表現では機能しない場合があります。最新バージョンのPostgresは、単純な正規表現にインデックスを使用できるため、可能性があります この例で動作します。詳細:
- PostgresでのLIKEと〜の違い