LIKE supporta la corrispondenza dei modelli utilizzando _ per ogni singolo carattere e % per qualsiasi sequenza di caratteri quindi questo:
SELECT 'thomas' LIKE '%(h|x)%'
non funziona perché LIKE non comprende (...) per il raggruppamento o | in alternativa, quelli sono solo caratteri letterali in uno schema LIKE.
SIMILI A supporta _ e % lo stesso di LIKE ma aggiunge il raggruppamento con (...) , alternanza con | , e poche altre cose, quindi questo:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
funziona come previsto.
~* usa le espressioni regolari POSIX quindi (...) è per il raggruppamento e | è per alternanza ma % è solo un segno di percentuale; ciò significa che questo:
SELECT 'thomas' ~* '%(h|x)%'
sta cercando un h o x circondato da segni di percentuale e non funziona come ti aspetti.
Il tuo ~* la versione funzionerà se usi un'espressione regolare corretta come:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
La documentazione collegata sopra copre tutto questo.