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

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

Linda Hamilton
發布: 2025-01-09 12:03:56
原創
717 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板