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.