Heim > Datenbank > MySQL-Tutorial > Wie erhalte ich Elementnummern, wenn ich durch Kommas getrennte Werte in PostgreSQL aufhebe?

Wie erhalte ich Elementnummern, wenn ich durch Kommas getrennte Werte in PostgreSQL aufhebe?

Linda Hamilton
Freigeben: 2025-01-23 04:08:10
Original
911 Leute haben es durchsucht

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

Verwenden Sie die Funktion UNNEST() in PostgreSQL und rufen Sie die Elementnummer ab

Wenn Sie in PostgreSQL mit Spalten arbeiten, die durch Kommas getrennte Werte enthalten, können Sie die Funktion unnest() verwenden, um einzelne Elemente zu extrahieren. Wenn Sie jedoch Elementnummern in Ihre Ausgabe einbeziehen müssen, gibt es einige Ansätze, die Sie in Betracht ziehen können.

PostgreSQL 14 und höher

Verwenden Sie die Funktion 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>
Nach dem Login kopieren

PostgreSQL 9.4 und höher

Für Funktionen, die eine Sammlung zurückgeben, verwenden Sie 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>
Nach dem Login kopieren

Oder, basierend auf dem tatsächlichen Array:

<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>
Nach dem Login kopieren

PostgreSQL 8.4 – 9.3-Versionen

Ersetzen Sie row_number() OVER (PARTITION BY id) durch 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>
Nach dem Login kopieren

PostgreSQL 8.1 – 8.4-Versionen

Verwenden Sie eine Funktion, um diese Funktionalität zu simulieren:

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erhalte ich Elementnummern, wenn ich durch Kommas getrennte Werte in PostgreSQL aufhebe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage