postgres修改数组元素

时间:2017-04-18 13:53:28

标签: json postgresql

我有一张桌子

id int | data json

使用数据:

1 | [1,2,3,2]
2 | [2,3,4]

我想修改行以删除数组元素(int)2

预期结果:

1 | [1,3]
2 | [3,4]

1 个答案:

答案 0 :(得分:1)

正如a_horse_with_no_name在他的评论中建议的那样,在这种情况下,正确的数据类型是int []。但是,您可以将json数组转换为int [],使用array_remove()并将结果转换回json:

with my_table(id, data) as (
values
(1, '[1,2,3,2]'::json),
(2, '[2,3,4]')
)

select id, to_json(array_remove(translate(data::text, '[]', '{}')::int[], 2))
from my_table;

 id | to_json 
----+---------
  1 | [1,3]
  2 | [3,4]
(2 rows)    

另一种可能性是使用json_array_elements()取消数组,消除不需要的元素并聚合结果:

select id, json_agg(elem)
from (
    select id, elem
    from my_table,
    lateral json_array_elements(data) elem
    where elem::text::int <> 2
    ) s
group by 1;