PostgreSQLは、どこからでも配列の添え字を処理できます。
5から7までの添え字を持つ3つの要素を持つ配列を作成するこの例を考えてみましょう。
SELECT '[5:7]={1,2,3}'::int[];
戻り値:
[5:7]={1,2,3}
下付き文字で最初の要素を取得します5
:
SELECT ('[5:7]={1,2,3}'::int[])[5];
1次元配列を正規化して、配列の添え字1から始めたいと思います。
私が思いつくことができる最高のもの:
SELECT ('[5:7]={1,2,3}'::int[])[array_lower('[5:7]={1,2,3}'::int[], 1):array_upper('[5:7]={1,2,3}'::int[], 1)]
同じ、読みやすい:
WITH cte(a) AS (SELECT '[5:7]={1,2,3}'::int[])
SELECT a[array_lower(a, 1):array_upper(a, 1)]
FROM cte;
よりシンプル/高速、または少なくともよりエレガントな方法を知っていますか?
Postgres9.5の古いソリューションのベンチマーク
ここでdb<>フィドル
Postgres14の新しいソリューションを含むベンチマーク
ここでdb<>フィドル