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

LIKEと〜の代わりに、代替との正規表現の一致を行うときにSIMILARTOのみが機能するのはなぜですか

    LIKEは、_を使用したパターンマッチングをサポートしています 任意の単一文字と% 文字の任意のシーケンスに対して、これは次のようになります:

    SELECT 'thomas' LIKE '%(h|x)%'
    

    LIKEが(...)を理解しないため、機能しません グループ化または| 交互に使用する場合、これらはLIKEパターンのリテラル文字です。

    SIMILARTOは_をサポートします および% LIKEと同じですが、(...)でグループ化を追加します 、|との交互 、および他のいくつかのことなので、これ:

    SELECT 'thomas' SIMILAR TO '%(h|x)%'
    

    期待どおりに機能します。

    ~* POSIX正規表現を使用するため、(...) グループ化と|用です 交替用ですが、% 単なるパーセント記号です。つまり、これは次のことを意味します:

    SELECT 'thomas' ~* '%(h|x)%'
    

    hを探しています またはx パーセント記号で囲まれていて、期待どおりに機能しません。

    あなたの~* 次のような適切な正規表現を使用すると、バージョンが機能します:

    SELECT 'thomas' ~* '(h|x)' -- alternation
    SELECT 'thomas' ~* 'h|x'   -- alternation without an unnecessary grouping
    SELECT 'thomas' ~* '[hx]'  -- or a character class
    

    上記にリンクされているドキュメントは、これらすべてをカバーしています。



    1. 事前入力されたデータベースの更新

    2. frmおよびibdファイルからテーブル構造を復元する

    3. SQLServerで数値をフォーマットする方法

    4. Oracle.DataClientを使用する場合、プロバイダーはOracleクライアントエラーのバージョンと互換性がありません