使用 Postgresql 查询检索 JSON 数组的前 N ​​条记录

Leo*_*ito 5 postgresql json

PostgreSQL从 9.3 版本开始就有了一些原生的JSON 操作。假设您有一个表 , my_table, 有一jsonmy_json_col, 结构如下:

[
  { "id": 1, "some_field": "blabla" },
  { "id": 2, "some_field": "foo" }
  ...
]
Run Code Online (Sandbox Code Playgroud)

要检索的第n个元素my_json_col,可以执行类似:SELECT my_json_col->n FROM my_table WHERE ...。因此,如果n = 1,查询将返回"id": 2我示例中的记录。

我想检索前 n 个元素,例如,如果n = 2查询应该返回我的示例中的前两条记录。这可能吗?

Tre*_*reg 11

在 PostgreSQL 12 中,您可以执行以下操作:

SELECT jsonb_path_query_array('["a","b","c","d","e","f"]', '$[0 to 3]');
 jsonb_path_query_array
------------------------
 ["a", "b", "c", "d"]
(1 row)
Run Code Online (Sandbox Code Playgroud)


Pau*_*rth 5

我认为您需要将 JSON 数组转换为常规 Postgres 数组,然后取一部分:

select (array_agg(e))[2:3]
from (select json_array_elements('[{"id":1},{"id":2},{"id":3},{"id":4}]'::json)) x(e);
Run Code Online (Sandbox Code Playgroud)

如果您需要结果为 JSON,则可以使用array_to_json

select array_to_json((array_agg(e))[2:3])
from (select json_array_elements('[{"id":1},{"id":2},{"id":3},{"id":4}]'::json)) x(e); 
Run Code Online (Sandbox Code Playgroud)