2016-08-18 89 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||'%')