【问题标题】:Loop over an PostgreSQL array within a SELECT query, instead of within a PLPGSQL function在 SELECT 查询中而不是在 PLPGSQL 函数中循环遍历 PostgreSQL 数组
【发布时间】:2011-07-09 04:56:35
【问题描述】:

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

有可能吗?

【问题讨论】:

    标签: sql arrays postgresql


    【解决方案1】:

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

    【讨论】:

    • 哦,对了,我认为这就是 OP 想要的,但仔细检查后,它不是......答案已更新。谢谢。
    【解决方案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 业务只是将结果集折叠为单个布尔值的便捷方式(我相信还有其他方式)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 2012-05-24
      • 2016-05-25
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多