LIKE поддържа съвпадение на шаблон с помощта на _
за всеки единичен знак и %
за произволна последователност от знаци, така че това:
SELECT 'thomas' LIKE '%(h|x)%'
не работи, защото LIKE не разбира (...)
за групиране или |
за редуване, това са просто буквални знаци в модел LIKE.
ПОДОБНО НА поддържа _
и %
същото като LIKE, но добавя групиране с (...)
, редуване с |
, и няколко други неща, така че това:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
работи според очакванията.
~*
използва POSIX регулярни изрази, така че (...)
е за групиране и |
е за редуване, но %
е само знак за процент; това означава, че това:
SELECT 'thomas' ~* '%(h|x)%'
търси h
или x
заобиколен от знаци за проценти и не работи така, както очаквате.
Вашият ~*
версията ще работи, ако използвате правилен регулярен израз като:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
Документацията, свързана с по-горе, обхваща всичко това.