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