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
上記にリンクされているドキュメントは、これらすべてをカバーしています。