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
Linda Hamiltonasal
2025-01-23 04:08:10912semak imbas

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

<code class="language-sql">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;</code>

PostgreSQL 9.4 dan lebih tinggi

Untuk fungsi yang mengembalikan koleksi, gunakan WITH ORDINALITY:

<code class="language-sql">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;</code>

Atau, berdasarkan tatasusunan sebenar:

<code class="language-sql">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;</code>

PostgreSQL 8.4 - 9.3 versi

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

<code class="language-sql">SELECT id, elem, row_number() OVER (PARTITION by id) AS nr
FROM (SELECT id, regexp_split_to_table(elements, ',') AS elem FROM tbl);</code>

PostgreSQL 8.1 - 8.4 versi

Gunakan fungsi untuk mensimulasikan fungsi ini:

<code class="language-sql">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;</code>

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