[英]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.