空数组的array_length()和cardinality()返回数组大小之一

问题描述 投票:0回答:2

我有一张像这样的桌子:

CREATE TABLE psdc_psr
(
    id bigint not null,
    available_region_code character varying(255)[],
    is_valid bigint,
)

我想使用

array_length()
cardinality()
available_region_code ='{}'
来选择空的
available_region_code 
列,但失败了,长度返回1。

为什么会出现这种情况以及如何解决这个问题。

sql postgresql
2个回答
1
投票

我不知道是什么原因导致这个问题。也许就像 jjanes 在评论中所说的那样,数组有一个非打印字符。

最后,我使用

(CAST(ARRAY_TO_JSON(available_region_code) AS VARCHAR) IN ('[null]', '[""]'))
检查空数组,该数组从相关区域的答案中学习(如何检查 Postgres 中的数组是否为空)。

打击结果:


0
投票

对于我在基于 presto 的 SQL 中遇到的类似问题,我创建了一个 case 语句,例如:

当 available_region_code[1] = '' 时,则为 0,否则基数(available_region_code)以基数结束

不确定这是否对您的用例有帮助,但它导致我的空数组为 0,而所有其他数组的计数都是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.