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
Linda Hamiltonasal
2025-01-09 12:03:56759semak imbas

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:

SELECT '[5:7]={1,2,3}'::int[];

Mengakses elemen pertama memerlukan menggunakan indeks 5:

SELECT ('[5:7]={1,2,3}'::int[])[5];

Walau bagaimanapun, ramai pengguna memilih tatasusunan dengan indeks bermula pada 1. Begini cara untuk mencapainya:

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)];

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):

WITH cte(a) AS (SELECT '[5:7]={1,2,3}'::int[])
SELECT a[array_lower(a, 1):array_upper(a, 1)]
FROM cte;

Untuk PostgreSQL 9.6 dan lebih baru, kaedah yang dipermudahkan wujud: meninggalkan sempadan bawah dan atas dalam spesifikasi hirisan:

SELECT my_arr[:];

Untuk contoh kami, kurungan meningkatkan kebolehbacaan:

SELECT ( '[5:7]={1,2,3}'::int[] )[:];

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!

Kenyataan:
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