我们可以做两个字符串:
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(数组元素)开头。
非常感谢您的帮助!
答案 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||'%')