Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Nombor Elemen Apabila Menyalahkan Nilai Dipisahkan Koma dalam PostgreSQL?
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.
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>
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>
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>
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!