LIKE unterstützt den Musterabgleich mit _ für jedes einzelne Zeichen und % für eine beliebige Folge von Zeichen so:
SELECT 'thomas' LIKE '%(h|x)%'
funktioniert nicht, weil LIKE (...) nicht versteht zum Gruppieren oder | zur Abwechslung, das sind nur wörtliche Zeichen in einem LIKE-Muster.
ÄHNLICH ZU unterstützt _ und % das gleiche wie LIKE, fügt aber eine Gruppierung mit (...) hinzu , im Wechsel mit | , und ein paar andere Dinge, also dies:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
funktioniert wie erwartet.
~* verwendet POSIX-Regexes, also (...) ist für die Gruppierung und | steht für Alternation, aber % ist nur ein Prozentzeichen; das bedeutet, dass dies:
SELECT 'thomas' ~* '%(h|x)%'
sucht nach einem h oder x umgeben von Prozentzeichen und funktioniert nicht so, wie Sie es erwarten.
Ihr ~* Version funktioniert, wenn Sie einen geeigneten regulären Ausdruck wie:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
Die oben verlinkte Dokumentation deckt all dies ab.