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.