Jar*_*bzo 9 postgresql array json
我想验证一json[]列the_array不为空。对于普通数组,我可以检查:
the_array != '{}'
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于 a json[],如下所示:
select '{}'::json[] != '{}'
ERROR: could not identify an equality operator for type json
Run Code Online (Sandbox Code Playgroud)
我可以改用以下检查:
array_length(the_array, 1) != null // yes, array_length on an
empty array returns null
Run Code Online (Sandbox Code Playgroud)
我担心这array_length()会遍历整个数组以计算项目数,然后返回该计数。就我而言,我不需要数组的实际大小,我只需要知道它是否为空。
那么,是否array_length()遍历整个数组?如果是这样,是否有更好的方法来检查 json 数组是否为空?
Eva*_*oll 12
这不是返回 JSON 数组。
SELECT '{}'::json[]
Run Code Online (Sandbox Code Playgroud)
该类型json[]不是“JSON 数组”,而是 JSON 类型的 SQL 数组。你永远不应该使用这种结构。这几乎可以肯定是糟糕设计的危险信号。
您要检查的是 Real JSON Array 不为空,您可以使用jsonb_array_length(jsonb). JSON 存储为JSON,或JSONB用于二进制 json。
SELECT jsonb_array_length( '[]'::jsonb );
Run Code Online (Sandbox Code Playgroud)
看看有没有空
SELECT jsonb_array_length( '[]'::jsonb ) = 0;
Run Code Online (Sandbox Code Playgroud)
警告,这只是计算这些元素,它们可能是 null,
SELECT jsonb_array_length( '[null]'::jsonb );
Run Code Online (Sandbox Code Playgroud)
所以你可能想先调用jsonb_strip_nulls()数组。
| 归档时间: |
|
| 查看次数: |
18435 次 |
| 最近记录: |