代码之家  ›  专栏  ›  技术社区  ›  Amit Panasara

PosgresQL中数组中的数组处理

  •  -1
  • Amit Panasara  · 技术社区  · 6 年前

    基于下面的查询,我从postgresql10.5的JsonB数据类型中提取了数组。它以文本形式提供数组数据(请参见列标题中的)。

    Snapshot of Parent table

    具有JSONB列的父数据表

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

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

    Snapshot after extractions of Coordinate Array

    请参阅下面的快照,它在输出中提供文本列

    我需要以这样一种方式来处理这个表,即我可以调用(数组的)x&y坐标 [[x1,y1],[x2,y2],...] )通过SQL

    2 回复  |  直到 6 年前
        1
  •  0
  •   sticky bit    6 年前

    您可以使用一个子查询,在该子查询中,JSON数组被转换为set 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";
    
        2
  •  0
  •   Amit Panasara    6 年前

    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;