PostgreSQL从 9.3 版本开始就有了一些原生的JSON 操作。假设您有一个表 , my_table, 有一json列my_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)
我认为您需要将 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)
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |