Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menormalkan semula Subskrip Array PostgreSQL untuk Bermula dari 1?

Bagaimana untuk Menormalkan semula Subskrip Array PostgreSQL untuk Bermula dari 1?

Linda Hamilton
Lepaskan: 2025-01-09 12:03:56
asal
669 orang telah melayarinya

How to Renormalize PostgreSQL Array Subscripts to Start from 1?

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>
Salin selepas log masuk

Mengakses elemen pertama memerlukan menggunakan indeks 5:

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

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Untuk contoh kami, kurungan meningkatkan kebolehbacaan:

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

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan