sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLLIKE句の正規表現

    @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と〜の違い


    1. 動的列の行への転置

    2. SQLの完了。成功と失敗の物語

    3. Oracleのログテーブルから電子メール本文にデータをエクスポートする方法

    4. 別のアプリケーションから1つのアプリケーションのデータベースにアクセスする