LIKE understøtter mønstermatchning ved hjælp af _ for ethvert enkelt tegn og % for enhver sekvens af tegn, så dette:
SELECT 'thomas' LIKE '%(h|x)%'
virker ikke, fordi LIKE ikke forstår (...) til gruppering eller | for alternering er det kun bogstavelige tegn i et LIKE-mønster.
SIMILAR TO understøtter _ og % det samme som LIKE men tilføjer gruppering med (...) , skiftevis med | , og et par andre ting, så dette:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
fungerer som forventet.
~* bruger POSIX regexes så (...) er til gruppering og | er til alternering, men % er kun et procenttegn; det betyder, at dette:
SELECT 'thomas' ~* '%(h|x)%'
leder efter en h eller x omgivet af procenttegn og virker ikke, som du forventer det.
Din ~* version vil fungere, hvis du bruger et korrekt regex som:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
Dokumentationen, der er linket til ovenfor, dækker alt dette.