【问题标题】:array_length() and cardinality() of an empty array return one of array size空数组的 array_length() 和 cardinality() 返回数组大小之一
【发布时间】:2021-09-15 01:39:01
【问题描述】:

我有一张这样的桌子:

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 列但它失败了,长度返回一。

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

【问题讨论】:

  • 我会说您有一个包含一个字符串的数组,并且该字符串仅包含非打印字符。或者至少,您使用的未说明的客户端认为它们是非打印的。
  • available_region_code[1] IS NULL 能得到什么?
  • @LaurenzAlbe available_region_code[1] IS NULL 是 Fase,也许就像@jjanes 说的,数组中有非打印字符。
  • 要查看详细信息,您可以查看available_region_code[1]::bytea。这将显示存储的字节数。

标签: sql postgresql


【解决方案1】:

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

最后,我使用(CAST(ARRAY_TO_JSON(available_region_code) AS VARCHAR) IN ('[null]', '[""]')) 来检查从问题区域(How to check if an array is empty in Postgres)的答案中学习的空数组。

一击的结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2019-07-24
    • 2019-12-16
    • 2013-12-25
    • 2016-03-11
    相关资源
    最近更新 更多