2014-12-15 6 views
2

Есть ли способ выполнить частичное совпадение строк в столбце массива строк в postgres?Как использовать LIKE с ЛЮБОЙ в Postgresql?

Я пытаюсь следующий синтаксис, но он не работает, как я бы ожидать, что это:

SELECT * FROM example_table WHERE '%partial string' ILIKE ANY(array_column) 

Есть правильный способ сделать это?

ответ

1
drop table if exists temp_a; 
create temp table temp_a as 
(
    select array['alpha','beta'] as strings 
    union all 
    select array['gamma','theta'] 
); 

select * 
from (select unnest(strings) as string from temp_a) as sq 
where string ilike '%eta' 
0

Вам нужно искать каждый индекс отдельно - вот пример, который может быть изложил включать несколько столбцов

SELECT distinct array_column FROM 
    (SELECT array_column, 
      generate_subscripts(array_column, 1) AS s 
     FROM example_table) AS foo 
WHERE array_column[s] like '%partial string'; 

Альтернативного хак:

select * from example_table where array_column::text like '%partial%' 

при необходимости вы могли бы взломать «частичными» чтобы включить/закрыть скобки и кавычки, чтобы быть немного точнее.