在SELECT查询中循环遍历PostgreSQL数组,而不是在PLPGSQL函数内循环

时间:2011-07-09 04:56:35

标签: sql arrays postgresql

我在PostgreSQL表中有一个text [] ARRAY列,我需要在SELECT查询(普通SQL,而不是plpgsql)中对数组内的每个元素运行char_length(),这样如果任何元素超过长度为25个字符,否则SELECT返回't'和'f'。我知道我可以在自定义plpgsql函数中循环遍历text [],但由于其他原因,我需要在SQL中找到一种方法来直接执行此操作。

有可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用unnest打开数组,然后使用一些简单的lengthexists内容:

select exists(
    select 1
    from (
        select unnest(ar) as x
        from table_name
    ) as t
    where length(x) > 25
)

existsselect 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;