LIKE supporta la corrispondenza dei modelli utilizzando _
per ogni singolo carattere e %
per qualsiasi sequenza di caratteri quindi questo:
SELECT 'thomas' LIKE '%(h|x)%'
non funziona perché LIKE non comprende (...)
per il raggruppamento o |
in alternativa, quelli sono solo caratteri letterali in uno schema LIKE.
SIMILI A supporta _
e %
lo stesso di LIKE ma aggiunge il raggruppamento con (...)
, alternanza con |
, e poche altre cose, quindi questo:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
funziona come previsto.
~*
usa le espressioni regolari POSIX quindi (...)
è per il raggruppamento e |
è per alternanza ma %
è solo un segno di percentuale; ciò significa che questo:
SELECT 'thomas' ~* '%(h|x)%'
sta cercando un h
o x
circondato da segni di percentuale e non funziona come ti aspetti.
Il tuo ~*
la versione funzionerà se usi un'espressione regolare corretta come:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
La documentazione collegata sopra copre tutto questo.