2016-08-18 124 views
2

给定两个字符串数组中的任何元素,我们可以做的开始:PostgreSQL的 - 检查给定的字符串处理字符串

select 'aaa123' ilike 'aaa'||'%' 

结果将是TRUE。我想用字符串和数组做同样的事情 - 如果给定的字符串以字符串数组的任何元素开始,而不是结果将显示TRUE。

例如(数组和字符串):

select array['aaa123'::text,'bbb123'::text] as text_array 
select 'aaa12345' as string 

我愿做这样的事情:

select string ilike ANY(text_array || '%') 

而且由于aaa12345与AAA123开始的数组(元素我希望TRUE )。

非常感谢您的帮助!

回答

1

你可以unnest()字符串数组,然后比较你的输入字符串与你想要的每个元素。

您将在输出中获得与数组中元素一样多的行。既然你需要一个明确的指标是否有任何对数组元素的比较得出真正使用bool_or()聚合函数:

select 
    bool_or('string12345' ilike arr_element||'%') 
from 
    unnest(ARRAY['string123','something']::text[]) x(arr_element); 

这将使你TRUE因为:

SELECT 'string12345' ilike 'string123%' -- true 

注:bool_or()返回true,如果至少一个输入值为true,否则为false。

+0

它真的帮助,大加赞赏。 –

2
select string ilike ANY(
    select s || '%' 
    from unnest(text_array) s(s) 
    ) 
1

您可以使用EXISTSunnest如下:

SELECT EXISTS (SELECT * FROM unnest(text_array) a WHERE 'aaa1234' ILIKE a||'%')