簡體   English   中英

如何在postgres中選擇json數組的大小?

[英]How to select size of json array in postgres?

我已經為此抗爭了很長時間,但我無法構建一個查詢,該查詢將選擇(並且最好也排序)數組中的項目數。

我確實有這樣的表數據:

ID    Data
1     {"$id": "1", "InnerArray": [{"$id": "1", "Timestamp": "2020-06-18T09:43:19.4873323+01:00"}, {"$id": "3", "Timestamp": "2020-06-19T08:25:35.7768657+00:00"}]}
etc...

我嘗試了什么...

SELECT JSON_ARRAY_LENGTH("Data" ->'InnerArray'::json) AS lengtha
FROM "mystorage"

SELECT JSON_ARRAY_LENGTH("Data"::json ->'InnerArray'::json) AS lengtha

但它說

SQL Error [22P02]: ERROR: invalid input syntax for type json
  Detail: Token "InnerArray" is invalid.
  Position: 49
  Where: JSON data, line 1: InnerArray

我嘗試了很多不同的格式,但是來自 MS SQL 世界,我對 PostgreSQL 的理解似乎有點有限。

->運算符的右側參數應該是text值,而不是json值。 所以開始時不需要演員表'InnerArray'::json

但這也是您出錯的原因,因為'InnerArray'不是有效的 JSON 值,因此您無法將其'InnerArray'為 1。

用:

SELECT json_array_length("Data"::json -> 'InnerArray') AS lengtha

順便說一句:如果您確實存儲 JSON 值,則您的列應定義為jsonb (或至少json ),而不是使用text (或varchar )並在每次要使用 JSON 函數時進行轉換。

你缺少一個}。 嘗試這個:

select json_array_length('{"$id": "1", "InnerArray": [{"$id": "1", "Timestamp": "2020-06-18T09:43:19.4873323+01:00"}, {"$id": "3", "Timestamp": "2020-06-19T08:25:35.7768657+00:00"}]}'::json->'InnerArray') as lengtha

此致,
比亞尼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM