postgresqlで配列のサイズを見つける方法


97

配列のサイズを見つける方法はありますか?

例えば、

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

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

このことから、次のような結果が得られる可能性はありますか?

size

0

3

回答:


120

vyegorovが述べたようにarray_length、トリックを行います。または、配列が1次元(可能性が高い)であり、PostgreSQL 9.4以降を実行していることがわかっている場合は、次を使用できますcardinality

SELECT cardinality(id) FROM example;

10
array_lengthとカーディナリティの使用における大きな違いについて誰かが言及できるとしたら、それは素晴らしいことです
Zia Ul Rehman Mughal

6
cardinality単一または多次元配列内のすべての要素の数を返します。だから、select cardinality(ARRAY[[1,2], [3,4]]);戻ってくる4のに対し、select array_length(ARRAY[[1,2], [3,4]], 1)返します2。あなたが最初の次元を数えているならarray_length、より安全な賭けです。
じゃんけん2017

2
これは、textタイプがフィールドに保存されている配列でも機能しますが、function array_length(text[]) does not exist;)
santuxus 2018

1
@ZiaUlRehmanMughalはまた、空の配列の配列の長さが予期せずに評価されnull、評価されないの0に対し、cardinality期待どおりの値を返します。彼らがその論理で何を考えていたのか分かりません。
EoghanM

81

ドキュメントを読むのは簡単です:

SELECT array_length(id, 1) FROM example;

13
関数の2番目のパラメーターが何であるか知っていますかarray_length。ドキュメントでその情報が見つかりませんでした。
suzanshakya 2013年

19
@suzanshakya、要求された配列次元の長さツ
vyegorov 2013年

5
これが返されますnullし、3代わりに03のOPS例えば。間違いの利用促進すべきであるcardinality、それは使いやすく、より少ない予想外だとして答えを受け入れるときに(配列の私は想像99.999%の使用は、単一の次元である)
EoghanM


9

配列の次元が常に1であると仮定することは、私が快適に感じるものではないので、次のようにしました。

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

少なくとも10年がcoalesce経ちましたが、以前は多くのことを行っていたので、とても便利でした。多分私は快適さからそれを手に入れていますか?


3

postgres8.2ではarray_upperを使用する必要がありました。


命の恩人。そこにあるほとんどすべての投稿は、人々がpostgres 9+にいると仮定して、array_length()を使用しています;(
uniquegino
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.