LIKE ondersteunt patroonherkenning met _ voor elk enkel teken en % voor elke reeks tekens, dus dit:
SELECT 'thomas' LIKE '%(h|x)%'
werkt niet omdat LIKE (...) . niet begrijpt voor groeperen of | voor afwisseling zijn dat slechts letterlijke karakters in een LIKE-patroon.
VERGELIJKBAAR MET ondersteunt _ en % hetzelfde als LIKE maar voegt groepering toe met (...) , afwisseling met | , en een paar andere dingen dus dit:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
werkt zoals verwacht.
~* gebruikt POSIX-regexen dus (...) is voor groeperen en | is voor afwisseling maar % is slechts een procentteken; dat betekent dat dit:
SELECT 'thomas' ~* '%(h|x)%'
is op zoek naar een h of x omgeven door procenttekens en werkt niet zoals u verwacht.
Uw ~* versie werkt als je een goede regex gebruikt zoals:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
De documentatie waarnaar hierboven is gelinkt, dekt dit allemaal.