tengo una mesa
id int | data jsonCon datos:
1 | [1,2,3,2] 2 | [2,3,4]Quiero modificar filas para eliminar el elemento de matriz (int) 2
Resultado Esperado:
1 | [1,3] 2 | [3,4]Como sugiere a_horse_with_no_name en su comentario, el tipo de datos adecuado es int[] en este caso. Sin embargo, puede transformar la matriz json en int[], usar array_remove() y transformar el resultado nuevamente en 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) Otra posibilidad es desensamblar los arreglos con json_array_elements() , eliminar elementos no deseados y agregar el resultado:
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;