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

pos*_*ner 5 arrays postgresql

给定两个字符串,我们可以执行以下操作:

select 'aaa123' ilike 'aaa'||'%'
Run Code Online (Sandbox Code Playgroud)

结果将为TRUE。我想对字符串和数组执行相同的操作-如果给定的字符串以字符串数组的任何元素开头,则结果将显示TRUE。

例如(数组和字符串):

select array['aaa123'::text,'bbb123'::text] as text_array
select 'aaa12345' as string
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

select string ilike ANY(text_array || '%')
Run Code Online (Sandbox Code Playgroud)

而且我期望为TRUE,因为aaa12345以aaa123(数组的元素)开头。

非常感谢您的帮助!

Kam*_*ski 5

您可以unnest()将字符串数组与您想要的每个元素进行比较。

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

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

这会给你TRUE因为:

SELECT 'string12345' ilike 'string123%' -- true
Run Code Online (Sandbox Code Playgroud)

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