Вы можете получить мощные регулярные выражения операторы ~
и ~*
для случая нечувствительный:
WHERE Field ~* '(cat|dog|animal|pet)'
SIMILAR TO
чувствителен к регистру, поэтому вы должны сделать:
WHERE Field SIMILAR TO '%([Cc][Aa][Tt]|[Dd][Oo][Gg]|[Aa][Nn][Ii][Mm][Aa][Ll]|[Pp][Ee][Tt])%'
ANY ARRAY
также будет работать, но производительность хуже:
WHERE Field ILIKE ANY (array['%cat%','%dog%','%animal%','%pet%'])
С некоторыми фиктивными данными с рядами 1000000 с BTREE INDEX в Field
, я получаю эти результаты:
╔═════════════╦═════════════╗
║ Operator ║ Time (secs) ║
╠═════════════╬═════════════╣
║ ~* ║ 1.5 ║
║ SIMILAR TO ║ 1.4 ║
║ ANY ARRAY ║ 4.0 ║
║ OR OR OR... ║ 4.0 ║
╚═════════════╩═════════════╝
можно использовать 'ПОДОБНЫХ в' синтаксис возможно – reptilicus
дубликата http://stackoverflow.com/questions/4928054/postgresql-wildcard-like-for-any-of-a-list-of-words –
Я пробовал ГДЕ (ОПИСАНИЕ похоже на «% (cat | dog | animal)% '), и это не сработало. Могли бы вы, пожалуйста, посоветовать? – ZJAY