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á.