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.