Postgresql
在 PostgreSQL 中返回一個 json 數組切片
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)