LIKE suporta correspondência de padrões usando
_
para qualquer caractere único e %
para qualquer sequência de caracteres, então isso:SELECT 'thomas' LIKE '%(h|x)%'
não funciona porque LIKE não entende
(...)
para agrupamento ou |
para alternância, esses são apenas caracteres literais em um padrão LIKE. SIMILAR TO suporta
_
e %
o mesmo que LIKE mas adiciona agrupamento com (...)
, alternância com |
, e algumas outras coisas para isso:SELECT 'thomas' SIMILAR TO '%(h|x)%'
funciona como esperado.
~*
usa regexes POSIX para que (...)
é para agrupamento e |
é para alternância, mas %
é apenas um sinal de porcentagem; isso significa que isso:SELECT 'thomas' ~* '%(h|x)%'
está procurando por um
h
ou x
cercado por sinais de porcentagem e não funciona da maneira que você espera. Seu
~*
versão funcionará se você usar um regex adequado como:SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
A documentação vinculada acima cobre tudo isso.