我有一张像这样的桌子:
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。
为什么会出现这种情况以及如何解决这个问题。
我不知道是什么原因导致这个问题。也许就像 jjanes 在评论中所说的那样,数组有一个非打印字符。
最后,我使用
(CAST(ARRAY_TO_JSON(available_region_code) AS VARCHAR) IN ('[null]', '[""]'))
检查空数组,该数组从相关区域的答案中学习(如何检查 Postgres 中的数组是否为空)。
对于我在基于 presto 的 SQL 中遇到的类似问题,我创建了一个 case 语句,例如:
当 available_region_code[1] = '' 时,则为 0,否则基数(available_region_code)以基数结束
不确定这是否对您的用例有帮助,但它导致我的空数组为 0,而所有其他数组的计数都是正确的。