LIKE admite la coincidencia de patrones usando _
para cualquier carácter único y %
para cualquier secuencia de caracteres así:
SELECT 'thomas' LIKE '%(h|x)%'
no funciona porque LIKE no entiende (...)
para agrupar o |
para la alternancia, esos son solo caracteres literales en un patrón LIKE.
SIMILAR A admite _
y %
lo mismo que LIKE pero agrega agrupación con (...)
, alternancia con |
, y algunas otras cosas así que esto:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
funciona como se esperaba.
~*
usa expresiones regulares POSIX así que (...)
es para agrupar y |
es para alternancia pero %
es solo un signo de porcentaje; eso significa que esto:
SELECT 'thomas' ~* '%(h|x)%'
está buscando una h
o x
rodeado de signos de porcentaje y no funciona de la forma esperada.
Tu ~*
La versión funcionará si usa una expresión regular adecuada como:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
La documentación vinculada anteriormente cubre todo esto.