【问题标题】:PostgreSQL: SELECT a function on all items in an array [duplicate]PostgreSQL:在数组中的所有项目上选择一个函数[重复]
【发布时间】:2016-01-04 22:16:50
【问题描述】:

考虑一个包含以下行的表:

id       | bigint
polygons | geometry(Polygon,4326)[]

SELECT-ing polygons 行返回一个不可读的二进制数据数组:

SELECT polygons FROM some_table WHERE id=405;
{0103000020E61000000100000006000000B84F039E5AC0E375243935C13F402...}

在第一个元素上使用 st_AsText 会返回可读的输出:

SELECT st_AsText(polygons[1]) FROM some_table WHERE id=405;
POLYGON((-106.4689521119 31.7547183717742 ...)

不出所料,该函数仅适用于元素,而不适用于数组:

SELECT st_AsText(polygons) FROM some_table WHERE id=405;
ERROR:  function st_astext(geometry[]) does not exist

用 Python 术语来说,我正在寻找 PostgreSQL 中的 print [st_AsText(p) for i in polygons] 等价物。

如何在 SELECT 语句中的数组的所有元素上运行 PostgreSQL 函数,a-la Python 的列表理解?

附录 我认为这不是严格的重复,因为How to apply a function to each element of an array column in Postgres? 处理内联数组(例如FROM unnest(ARRAY[1.53224,0.23411234])),而这个问题处理包含数组列的表中的SELECT 语句。转换并非微不足道,至少对我来说是这样。

【问题讨论】:

    标签: arrays postgresql postgis postgresql-9.3 sql-function


    【解决方案1】:

    使用unnest():

    SELECT st_AsText(p) 
    FROM some_table, unnest(polygons) p 
    WHERE id=405;
    

    【讨论】:

      猜你喜欢
      • 2022-11-28
      • 2013-10-25
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      相关资源
      最近更新 更多