LIKE prend en charge la correspondance de modèles à l'aide de _
pour tout caractère unique et %
pour n'importe quelle séquence de caractères donc ceci :
SELECT 'thomas' LIKE '%(h|x)%'
ne fonctionne pas car LIKE ne comprend pas (...)
pour grouper ou |
pour l'alternance, ce ne sont que des caractères littéraux dans un modèle LIKE.
SIMILAIRE À prend en charge _
et %
identique à LIKE mais ajoute le groupement avec (...)
, alternance avec |
, et quelques autres choses donc ceci :
SELECT 'thomas' SIMILAR TO '%(h|x)%'
fonctionne comme prévu.
~*
utilise les regex POSIX donc (...)
est pour le regroupement et |
est pour l'alternance mais %
est juste un signe de pourcentage ; cela signifie que ceci :
SELECT 'thomas' ~* '%(h|x)%'
recherche un h
ou x
entouré de signes de pourcentage et ne fonctionne pas comme prévu.
Votre ~*
version fonctionnera si vous utilisez une expression régulière appropriée comme :
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
La documentation liée ci-dessus couvre tout cela.