【问题标题】:How to find the size of an array in postgresql如何在 postgresql 中查找数组的大小
【发布时间】:2012-06-26 16:11:03
【问题描述】:

有什么方法可以求出数组的大小?

例如,

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

INSERT INTO exam VALUES ( '{5,6,7}');

由此,有没有可能得到如下结果,

size

0

3

【问题讨论】:

    标签: sql arrays postgresql size


    【解决方案1】:

    这是微不足道的reading docs

    SELECT array_length(id, 1) FROM example;
    

    【讨论】:

    • 你知道函数array_length的第二个参数是什么吗?在文档中找不到该信息。
    • @suzanshakya, 请求数组的长度dimension
    • 这将返回 null3,而不是 OP 示例中的 03。在接受答案时绝对应该提倡使用cardinality,因为它更容易使用且更少意外(我想 99.999% 的数组使用都是一维的)
    【解决方案2】:

    正如vyegorov 提到的,array_length 可以解决问题。或者如果你知道数组是一维的(很可能)并且运行的是 PostgreSQL 9.4 或更高版本,你可以使用cardinality

    SELECT cardinality(id) FROM example;
    

    【讨论】:

    • 如果有人能提到使用 array_length 和基数的主要区别,那就太好了
    • cardinality 返回单个或多维数组中所有元素的数量。所以select cardinality(ARRAY[[1,2], [3,4]]); 将返回4,而select array_length(ARRAY[[1,2], [3,4]], 1) 将返回2。如果您计算第一个维度,array_length 是更安全的选择。
    • 这也适用于保存在 text 类型字段中的数组,而 function array_length(text[]) does not exist ;)
    • @ZiaUlRehmanMughal 空数组的数组长度也意外地计算为null 而不是0cardinality 返回你所期望的。不知道他们用这种逻辑在想什么。
    • 我想知道为什么这被称为 cardinality... 像 array_size 这样的东西会更直观 IMO
    【解决方案3】:

    不得不在 postgres 8.2 中使用 array_upper。

    【讨论】:

    • 救命稻草。因为几乎所有的帖子都使用 array_length() 假设人们在 postgres 9+ ;(
    【解决方案4】:

    假设数组的维度总是 1 我觉得不舒服,所以我选择了以下内容:

    SELECT coalesce(array_length(id, 1), 0) as size FROM example;
    

    已经……至少有十年了,但我们过去经常使用 coalesce 做很多事情,而且非常方便。也许我是出于舒适而伸手去拿它?

    【讨论】:

      猜你喜欢
      • 2021-06-07
      • 1970-01-01
      • 2011-11-16
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2021-11-05
      相关资源
      最近更新 更多