PosgresQL中的数组处理中的数组

时间:2018-09-08 11:48:24

标签: sql arrays json postgresql

我已根据以下查询从PostgresQL 10.5的JsonB数据类型中提取了数组。给出数组数据但为文本(请参见列标题)。

Snapshot of Parent table

具有JSONB列的父数据表

代码从JSONB列中提取数组文本

SELECT "Path" -> 'points' ->> 'coordinates' AS ca from public."Route"

Snapshot after extractions of Coordinate Array

引用下面的快照,该快照在输出中显示文本列

我需要以能够通过SQL调用x和y坐标(数组[[x1,y1],[x2,y2],...]的x和y坐标)的方式处理该表

2 个答案:

答案 0 :(得分:0)

您可以使用子查询,在该子查询中,将JSON数组设置为jsonb_array_elements_text(),然后将其聚合为array_agg()并进行转换。

SELECT (SELECT array_agg(jae.e::decimal)
               FROM jsonb_array_elements_text("Path"->'points'->'coordinates') jae(e)) points
FROM "Route";

答案 1 :(得分:0)

感谢@Sticky的指导。...我通过Blog

获得了完整的解决方案
SELECT array_agg(t) 
FROM ( 
       SELECT REPLACE(REPLACE(REPLACE(UNNEST(a), '[', ''), ']', ''),' ','')::decimal AS t, ROW_NUMBER() OVER (ORDER BY 1) AS r 
       FROM ( 
              SELECT STRING_TO_ARRAY(jsonb_array_elements_text("Path"->'points'->'coordinates'), ',') a 
              FROM "Route" 
            ) t 
      ) t 
Group by r 
order by r;