Массив в обработке массивов в PosgresQL - PullRequest
0 голосов
/ 08 сентября 2018

Я извлек массив из JsonB-типа данных PostgresQL 10.5 на основе запроса ниже. который дает данные массива, но в виде текста (см. заголовок столбца).

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 ]

0 голосов
/ 17 сентября 2018

Спасибо @Sticky немного за руководство .... Я получил полное решение через Блог

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;
0 голосов
/ 08 сентября 2018

Вы можете использовать подзапрос, в котором массив 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...