Postgresql

在 PostgreSQL 中返回一個 json 數組切片

  • March 17, 2020

Postgres 9.5

給定一個包含一個類型欄位的表json,大約 700 行,並且每行在單個數組中包含大約 4,000 個元素…

my_db_field:

[0.44577, 0.4855, 0.45429, 0.54437,...]
[0.45012, 0.48698, 0.45715, 0.55337,...]
[0.47347, 0.49156, 0.46079, 0.56818,...]
[0.4936, 0.49835, 0.46086, 0.58195,...]
[0.51068, 0.50511, 0.46228, 0.59482,...]

PostgreSQL 文件展示瞭如何查詢數組中的單個元素。

SELECT my_db_field->2 AS test FROM my_db_table

結果:

test (of type json)
--------------------
0.4855
0.48698
0.49156
etc.

不過,我想做的是選擇數組中的多個元素,然後以與行相同的格式將其作為數組返回。多個,我的意思是數組中有大約 300 個元素;例如,從元素 0 到元素 300。Postgres 對這樣的查詢有很好的語法嗎?

select  array_to_json 
       (
          (select  array_agg(my_db_field->n order by n) 
           from    generate_series(0,least(300,json_array_length(my_db_field))-1) gs(n) 
           )
       )

from    my_db_table

此解決方案(此答案中的原始解決方案)很可能不保證元素的順序

select (array(select json_array_elements(my_db_field)))[1:300]
from    my_db_table

jsonb_path_query_array在 PostgreSQL 12 中,您可以使用以下函式獲取 JSONB 數組切片:

SELECT jsonb_path_query_array('["a","b","c","d","e","f"]', '$[2 to 4]');
jsonb_path_query_array
------------------------
["c", "d", "e"]
(1 row)

引用自:https://dba.stackexchange.com/questions/163761