30

PostgreSQL Documentation on arraysは、配列の[-1]最後の要素と思われるものにアクセスするために使用する例を提供します。ただし、SELECT arr[2:3];が生成されますが{5,9}arr[2:-1]結果は になり{}ます。

PostgreSQLで配列の最後の要素を取得するにはどうすればよいですか?

編集: Windows、PostgreSQL v9.2.1

4

3 に答える 3

31

例を誤解していると思います。nPostgreSQL 配列は 1 からまでのインデックスを付ける必要はありません。これは単なるデフォルトです:

デフォルトでは、PostgreSQL は配列に対して 1 ベースの番号付け規則を使用します。つまり、n要素の配列は で始まり でarray[1]終わりarray[n]ます。

あなたが見ている例はこれです:

SELECT f1[1][-2][3] AS e1, f1[1][-1][5] AS e2
 FROM (SELECT '[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[] AS f1) AS ss;

しかし、これらの負の数は、Perl などの言語のように配列の最後からインデックス付けされていません。そのFROM (SELECT ...部分では、開始インデックスと終了インデックスを指定しているため、-1 inf1[1][-1][5]は単純な古いインデックスです。このarray_dims結果を考えてみましょう:

=> SELECT array_dims('[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[]);
    array_dims     
-------------------
 [1:1][-2:-1][3:5]

デフォルトの 1 から始まる配列を使用している場合は、単純な で最後の要素を取得できますarr[array_length(arr, 1)]。デフォルトの[1:n]配列を使用していない場合は、最初と最後の要素をいじって取得する必要がarray_lowerあります。array_upperまたは、状況によっては、 を使用unnestして配列をアンパックし、配列を行セットとして操作できる場合があります。

于 2012-10-07T04:16:17.243 に答える