Melaraskan Indeks Array PostgreSQL untuk Bermula dari 1
Fleksibiliti PostgreSQL membenarkan tatasusunan dengan indeks yang tidak bermula pada standard 1. Contohnya, elemen tatasusunan berikut diindeks dari 5 hingga 7:
<code class="language-sql">SELECT '[5:7]={1,2,3}'::int[];</code>
Mengakses elemen pertama memerlukan menggunakan indeks 5:
<code class="language-sql">SELECT ('[5:7]={1,2,3}'::int[])[5];</code>
Walau bagaimanapun, ramai pengguna memilih tatasusunan dengan indeks bermula pada 1. Begini cara untuk mencapainya:
<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>
Ini mengekstrak kepingan tatasusunan daripada indeks yang paling rendah kepada yang tertinggi, dengan berkesan menetapkan semula pengindeksan.
Pendekatan yang lebih mudah dibaca menggunakan Common Table Expression (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>
Untuk PostgreSQL 9.6 dan lebih baru, kaedah yang dipermudahkan wujud: meninggalkan sempadan bawah dan atas dalam spesifikasi hirisan:
<code class="language-sql">SELECT my_arr[:];</code>
Untuk contoh kami, kurungan meningkatkan kebolehbacaan:
<code class="language-sql">SELECT ( '[5:7]={1,2,3}'::int[] )[:];</code>
Pendekatan ini cekap dan berfungsi dengan baik walaupun dalam versi Postgres sebelum 9.6.
Atas ialah kandungan terperinci Bagaimana untuk Menormalkan semula Subskrip Array PostgreSQL untuk Bermula dari 1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!