LIKE obsługuje dopasowywanie wzorców za pomocą _ dla dowolnego pojedynczego znaku i % dla dowolnej sekwencji znaków, więc to:
SELECT 'thomas' LIKE '%(h|x)%'
nie działa, ponieważ LIKE nie rozumie (...) do grupowania lub | naprzemiennie są to tylko dosłowne znaki we wzorze LIKE.
PODOBNE DO obsługuje _ i % to samo co LIKE, ale dodaje grupowanie za pomocą (...) , na przemian z | i kilka innych rzeczy, więc to:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
działa zgodnie z oczekiwaniami.
~* używa wyrażeń regularnych POSIX, więc (...) służy do grupowania i | jest na przemian, ale % to tylko znak procentowy; oznacza to, że:
SELECT 'thomas' ~* '%(h|x)%'
szuka h lub x otoczony znakami procentowymi i nie działa tak, jak tego oczekujesz.
Twój ~* wersja będzie działać, jeśli użyjesz prawidłowego wyrażenia regularnego, takiego jak:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
Dokumentacja połączona z powyższym obejmuje to wszystko.