Postgresql - 检查给定的字符串是否以字符串数组的任何元素开头

时间:2016-08-18 13:37:49

标签: arrays 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 || '%')

我期待TRUE,因为aaa12345以aaa123(数组元素)开头。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

您可以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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您可以EXISTS使用unnest,如下所示:

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