LIKE stöder mönstermatchning med _
för ett enskilt tecken och %
för alla teckensekvenser så här:
SELECT 'thomas' LIKE '%(h|x)%'
fungerar inte eftersom LIKE inte förstår (...)
för gruppering eller |
omväxlande är det bara bokstavliga tecken i ett LIKE-mönster.
SIMILAR TO stöder _
och %
samma som LIKE men lägger till gruppering med (...)
, omväxlande med |
, och några andra saker så här:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
fungerar som förväntat.
~*
använder POSIX regex så (...)
är för gruppering och |
är för alternering men %
är bara ett procenttecken; det betyder att detta:
SELECT 'thomas' ~* '%(h|x)%'
letar efter en h
eller x
omgiven av procenttecken och fungerar inte som du förväntar dig.
Din ~*
version kommer att fungera om du använder ett 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 som länkas till ovan täcker allt detta.