LIKE unterstützt den Musterabgleich mit _
für jedes einzelne Zeichen und %
für eine beliebige Folge von Zeichen so:
SELECT 'thomas' LIKE '%(h|x)%'
funktioniert nicht, weil LIKE (...)
nicht versteht zum Gruppieren oder |
zur Abwechslung, das sind nur wörtliche Zeichen in einem LIKE-Muster.
ÄHNLICH ZU unterstützt _
und %
das gleiche wie LIKE, fügt aber eine Gruppierung mit (...)
hinzu , im Wechsel mit |
, und ein paar andere Dinge, also dies:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
funktioniert wie erwartet.
~*
verwendet POSIX-Regexes, also (...)
ist für die Gruppierung und |
steht für Alternation, aber %
ist nur ein Prozentzeichen; das bedeutet, dass dies:
SELECT 'thomas' ~* '%(h|x)%'
sucht nach einem h
oder x
umgeben von Prozentzeichen und funktioniert nicht so, wie Sie es erwarten.
Ihr ~*
Version funktioniert, wenn Sie einen geeigneten regulären Ausdruck wie:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
Die oben verlinkte Dokumentation deckt all dies ab.