使用PostgreSQL 9.4计算JSONB数组长度

95
我正在使用最新版本的PostgreSQL 9.4.5-1.pgdg14.04+1,尝试使用PostgreSQL 9.4文档中描述的JSON_ARRAY_LENGTH函数计算JSONB数组的长度。
这是我试图运行的确切查询:
SELECT JSON_ARRAY_LENGTH('["hi","ho"]'::jsonb) AS length
当我运行该查询时,我期望返回一个值为2的结果,但是遇到了错误:ERROR: function json_array_length(jsonb) does not exist 在文档中我是否漏掉了什么非常明显的东西?文档明确指出,您可以调用JSON_ARRAY_LENGTH并传递jsonjsonb数据类型。我显式地将其强制转换为jsonb,所以我有点不知所措。
其他人是否遇到过这个问题,或者有人可以指出我的错误?
更新:我没有正确阅读文档
我应该调用JSONB_ARRAY_LENGTH而不是JSON_ARRAY_LENGTH。请注意在“JSON”后面有“B”。谢谢大家。

1
我找不到“它明确说明您可以传递json或jsonb数据类型来调用JSON_ARRAY_LENGTH”的地方 - 你能引用文字吗? - klin
2
可能是误解了。手册上说json_array_length(json) jsonb_array_length(jsonb) - Erwin Brandstetter
1
正如 @klin 所说,我认为您误读了文档,它显示您需要根据数据类型调用函数的 json_jsonb_ 版本。 - Doon
1
哇,你说得对。我误读了文档,没有注意到函数名称本身的区别。 - Joshua Burns
当列类型为'jsonb []'时,是否有不同的函数? 值看起来像“{1,2}”,列类型为jsonb []。 - Brian D
1个回答

171
SELECT jsonb_array_length('["question","solved"]') AS length;
或者
SELECT json_array_length('["question","solved"]') AS length;

对我来说,函数名称必须大写才能正常工作(Windows,也许?)JSONB_ARRAY_LENGTH/JSON_ARRAY_LENGTH。 - Dakusan
1
请注意,如果数组为空,则此方法将无效。请参考此处以了解有关如何处理(或过滤掉)此类情况的更多详细信息:https://dev59.com/-mIk5IYBdhLWcg3wRcQo#19426902 - Yoav Feuerstein
在我的情况下,我需要最初转换为jsonb或json。 - Daniil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接