我在PostgreSQL表中有一个text [] ARRAY列,我需要在SELECT查询(普通SQL,而不是plpgsql)中对数组内的每个元素运行char_length(),这样如果任何元素超过长度为25个字符,否则SELECT返回't'和'f'。我知道我可以在自定义plpgsql函数中循环遍历text [],但由于其他原因,我需要在SQL中找到一种方法来直接执行此操作。
有可能吗?
答案 0 :(得分:2)
您可以使用unnest
打开数组,然后使用一些简单的length
和exists
内容:
select exists(
select 1
from (
select unnest(ar) as x
from table_name
) as t
where length(x) > 25
)
exists
和select 1
业务只是将结果集折叠为单个布尔值的便捷方式(我确信还有其他方法)。
答案 1 :(得分:2)
从PostgreSQL 8.4开始,您可以使用UNNEST
函数:
SELECT MAX((char_length(string) > 25)::INT)::BOOLEAN
FROM (
SELECT my_array,UNNEST(my_array) AS string
FROM my_table
) AS x
GROUP BY my_array;