首頁 >資料庫 >mysql教程 >如何重新規範 PostgreSQL 陣列下標從 1 開始?

如何重新規範 PostgreSQL 陣列下標從 1 開始?

Linda Hamilton
Linda Hamilton原創
2025-01-09 12:03:56717瀏覽

How to Renormalize PostgreSQL Array Subscripts to Start from 1?

調整 PostgreSQL 陣列索引從 1 開始

PostgreSQL 的彈性允許陣列的索引不從標準 1 開始。例如,以下數組的元素索引從 5 到 7:

<code class="language-sql">SELECT '[5:7]={1,2,3}'::int[];</code>

存取第一個元素需要使用索引 5:

<code class="language-sql">SELECT ('[5:7]={1,2,3}'::int[])[5];</code>

但是,許多使用者喜歡索引從 1 開始的陣列。以下是實現此目的的方法:

<code class="language-sql">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)];</code>

這會從最低索引到最高索引提取數組切片,從而有效地重置索引。

使用通用表表達式 (CTE) 的更具可讀性的方法:

<code class="language-sql">WITH cte(a) AS (SELECT '[5:7]={1,2,3}'::int[])
SELECT a[array_lower(a, 1):array_upper(a, 1)]
FROM cte;</code>

對於 PostgreSQL 9.6 及更高版本,有一個簡化的方法:省略切片規格中的下限和上限:

<code class="language-sql">SELECT my_arr[:];</code>

對於我們的範例,括號提高了可讀性:

<code class="language-sql">SELECT ( '[5:7]={1,2,3}'::int[] )[:];</code>

這種方法非常高效,即使在 9.6 之前的 Postgres 版本中也能正常運作。

以上是如何重新規範 PostgreSQL 陣列下標從 1 開始?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn