Heim >Datenbank >MySQL-Tutorial >Wie entschachtelt man durch Kommas getrennte Zeichenfolgen in PostgreSQL effizient?

Wie entschachtelt man durch Kommas getrennte Zeichenfolgen in PostgreSQL effizient?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-23 04:28:10714Durchsuche

How to Efficiently Unnest Comma-Separated Strings in PostgreSQL?

PostgreSQL 14 und höher

Für durch Kommas getrennte Zeichenfolgen verwenden Sie die Funktion string_to_table() anstelle von unnest(string_to_array()):

<code class="language-sql">SELECT t.id, a.elem, a.nr
FROM tbl t
LEFT JOIN LATERAL string_to_table(t.elements, ',') WITH ORDINALITY AS a(elem, nr) ON true;</code>

PostgreSQL 9.4 und höher

Fügen Sie WITH ORDINALITY für Funktionen hinzu, die Sammlungen zurückgeben:

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

PostgreSQL 8.4 – 9.3-Versionen

Verwenden Sie row_number() OVER (PARTITION BY id) (ohne ORDER BY), um die Seriennummer zu erhalten:

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

PostgreSQL 8.1 – 8.4-Versionen

Benutzerdefinierte Funktion f_unnest_ord() zum Aufteilen von Elementen mit Seriennummern implementieren:

<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';</code>

Das obige ist der detaillierte Inhalt vonWie entschachtelt man durch Kommas getrennte Zeichenfolgen in PostgreSQL effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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