gpt4 book ai didi

arrays - 如何在 postgres 9.3 中将 json 数组转换为 postgres int 数组

转载 作者:行者123 更新时间:2023-11-29 11:18:29 29 4
gpt4 key购买 nike

我有一个场景,我需要将一个 json 数组转换为 postgres int 数组并查询它的结果。下面是我的数组

      ID            DATA
1 {"bookIds" : [1,2,3,5], "storeIds": [2,3]}
2 {"bookIds" : [4,5,6,7], "storeIds": [1,3]}
3 {"bookIds" : [11,12,10,9], "storeIds": [4,3]}

我想将 booksId 数组转换为 int 数组,然后再查询它。在 postgres 9.3 中可以吗?我知道 9.4 + 提供了更多的 JSON 支持,但我现在无法更新我的数据库。

下面的查询给我错误

  Select data::json->>'bookIds' :: int[] from table

ERROR: malformed array literal: "bookIds"
LINE 1: Select data::json->>'bookIds' :: int[] from table

是否可以在 postgres 9.3 中查询 json 数组中的元素。提前致谢 ...

最佳答案

问题中的设置应如下所示:

create table a_table (id int, data json);
insert into a_table values
(1, '{"bookIds": [1,2,3,5], "storeIds": [2,3]}'),
(2, '{"bookIds": [4,5,6,7], "storeIds": [1,3]}'),
(3, '{"bookIds": [11,12,10,9], "storeIds": [4,3]}');

注意 json 值的正确语法。

您可以使用函数 json_array_elements()

select id, array_agg(e::text::int)
from a_table, json_array_elements(data->'bookIds') e
group by 1
order by 1;

id | array_agg
----+--------------
1 | {1,2,3,5}
2 | {4,5,6,7}
3 | {11,12,10,9}
(3 rows)

使用 any() 在数组中搜索元素,例如:

select *
from (
select id, array_agg(e::text::int) arr
from a_table, json_array_elements(data->'bookIds') e
group by 1
) s
where
1 = any(arr) or
11 = any(arr);

id | arr
----+--------------
1 | {1,2,3,5}
3 | {11,12,10,9}
(2 rows)

另请阅读 <@ operator .

您还可以通过检查其元素来搜索 json 数组(无需将其转换为 int 数组),例如:

select t.*
from a_table t, json_array_elements(data->'bookIds') e
where e::text::int in (1, 11);

id | data
----+-----------------------------------------------
1 | {"bookIds" : [1,2,3,5], "storeIds": [2,3]}
3 | {"bookIds" : [11,12,10,9], "storeIds": [4,3]}
(2 rows)

关于arrays - 如何在 postgres 9.3 中将 json 数组转换为 postgres int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37686187/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com