LIKE podporuje shodu se vzorem pomocí _
pro jakýkoli jednotlivý znak a %
pro jakoukoli sekvenci znaků, takže toto:
SELECT 'thomas' LIKE '%(h|x)%'
nefunguje, protože LIKE nerozumí (...)
pro seskupování nebo |
pro alternaci jsou to pouze doslovné znaky ve vzoru LIKE.
SIMILAR TO podporuje _
a %
stejné jako LIKE, ale přidává seskupení pomocí (...)
, střídání s |
, a několik dalších věcí, takže toto:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
funguje podle očekávání.
~*
používá regulární výrazy POSIX, takže (...)
je pro seskupování a |
je pro alternaci, ale %
je jen znak procenta; to znamená, že toto:
SELECT 'thomas' ~* '%(h|x)%'
hledá h
nebo x
obklopený znaky procenta a nefunguje tak, jak očekáváte.
Váš ~*
verze bude fungovat, pokud použijete správný regulární výraz jako:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
Dokumentace, na kterou odkazuje výše, toto vše pokrývá.