Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Nombor Elemen Apabila Menyalahkan Nilai Dipisahkan Koma dalam PostgreSQL?

Bagaimana untuk Mendapatkan Nombor Elemen Apabila Menyalahkan Nilai Dipisahkan Koma dalam PostgreSQL?

Linda Hamilton
Lepaskan: 2025-01-23 04:08:10
asal
941 orang telah melayarinya

How to Get Element Numbers When UNNESTing Comma-Separated Values in PostgreSQL?

Gunakan fungsi UNNEST() dalam PostgreSQL dan dapatkan nombor elemen

Apabila bekerja dengan lajur yang mengandungi nilai dipisahkan koma dalam PostgreSQL, anda boleh menggunakan fungsi unnest() untuk mengekstrak elemen individu. Walau bagaimanapun, jika anda perlu memasukkan nombor elemen dalam output anda, terdapat beberapa pendekatan yang boleh anda pertimbangkan.

PostgreSQL 14 dan lebih tinggi

Gunakan fungsi string_to_table():

SELECT t.id, a.elem, a.nr
FROM tbl AS t
LEFT JOIN LATERAL string_to_table(t.elements, ',') WITH ORDINALITY AS a(elem, nr) ON true;
Salin selepas log masuk

PostgreSQL 9.4 dan lebih tinggi

Untuk fungsi yang mengembalikan koleksi, gunakan WITH ORDINALITY:

SELECT t.id, a.elem, a.nr
FROM tbl AS t
LEFT JOIN LATERAL unnest(string_to_array(t.elements, ',')) WITH ORDINALITY AS a(elem, nr) ON true;
Salin selepas log masuk

Atau, berdasarkan tatasusunan sebenar:

SELECT t.id, a.elem, a.nr
FROM tbl AS t
LEFT JOIN LATERAL unnest(t.arr) WITH ORDINALITY AS a(elem, nr) ON true;
Salin selepas log masuk

PostgreSQL 8.4 - 9.3 versi

Gantikan row_number() OVER (PARTITION BY id) dengan ORDER BY:

SELECT id, elem, row_number() OVER (PARTITION by id) AS nr
FROM (SELECT id, regexp_split_to_table(elements, ',') AS elem FROM tbl);
Salin selepas log masuk

PostgreSQL 8.1 - 8.4 versi

Gunakan fungsi untuk mensimulasikan fungsi ini:

CREATE FUNCTION f_unnest_ord(anyarray, OUT val anyelement, OUT ordinality integer)
  RETURNS SETOF record
  LANGUAGE sql IMMUTABLE AS
'SELECT [i], i - array_lower(,1) + 1
 FROM generate_series(array_lower(,1), array_upper(,1)) i';

SELECT id, arr, (rec).*
FROM (
   SELECT *, f_unnest_ord(arr) AS rec
   FROM (
      VALUES
        (1, '{a,b,c}'::text[])  -- short for: '[1:3]={a,b,c}'
      , (2, '[5:7]={a,b,c}')
      , (3, '[-9:-7]={a,b,c}')
      ) t(id, arr)
   ) sub;
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nombor Elemen Apabila Menyalahkan Nilai Dipisahkan Koma dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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