Подстановочный знак PostgreSQL как для любого из списка слов
у меня есть простой список из ~25 слов. У меня есть поле varchar в PostgreSQL, скажем, что список ['foo', 'bar', 'baz']. Я хочу найти любую строку в моей таблице, которая имеет любое из этих слов. Это будет работать, но я хотел бы что-то более элегантное.
select *
from table
where (lower(value) like '%foo%' or lower(value) like '%bar%' or lower(value) like '%baz%')
4 ответов:
Вы можете использовать Postgres'
SIMILAR TOоператор, который поддерживает чередования, т. е.select * from table where lower(value) similar to '%(foo|bar|baz)%';
PostgreSQL также поддерживает full регулярные выражения POSIX:
select * from table where value ~* 'foo|bar|baz';The
~*для совпадения без учета регистра,~регистр.другой вариант-использовать любой:
select * from table where value like any (array['%foo%', '%bar%', '%baz%']); select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);вы можете использовать любой с любым оператором, который дает логическое значение. Я подозреваю, что параметры регулярных выражений будут быстрее, но любой из них является полезным инструментом в вашем наборе инструментов.
одним из "элегантных" решений было бы использование полнотекстового поиска:http://www.postgresql.org/docs/9.0/interactive/textsearch.html. Затем вы будете использовать полнотекстовые поисковые запросы.
на самом деле есть оператор для этого в PostgreSQL:
SELECT * FROM table WHERE lower(value) ~~ ANY('{%foo%,%bar%,%baz%}');
Comments