PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Auswählen von Arrays in schön gedrucktem Format in SQL

Es gibt mehrere Möglichkeiten. Eine Möglichkeit besteht darin, das Array in Text umzuwandeln und es mit regexp_split_to_table aufzuteilen () .
Diese Funktion ist in PostgreSQL 8.3 oder höher vorhanden .

SELECT regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{');

Ausgabe:

0,0,0
1,1,1
2,2,2

Wenn Sie die einschließenden Klammern möchten (vielleicht nicht?), fügen Sie sie wie folgt wieder hinzu:

SELECT '{' || regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{') || '}';

Ourtput:

{0,0,0}
{1,1,1}
{2,2,2}

Alternative:

Dies sollte auch mit PostgreSQL 8.2 funktionieren oder vielleicht sogar früher, aber das habe ich nicht getestet.

SELECT my_2d_int_arr_var[x:x][1:3]
  FROM (SELECT generate_series(1, array_upper(my_2d_intarr, 1), 1)::int4 AS x)) x

Ausgabe:

{{0,0,0}}
{{1,1,1}}
{{2,2,2}}

(Vielleicht möchten Sie einige geschweifte Klammern entfernen ..)

Andernfalls würde ich eine plpgsql-Funktion schreiben, die das Array durchläuft. Ziemlich einfach.

Es gibt auch den zugehörigen unnest() Funktion, aber es gibt eine Zeile pro Basiselement (in diesem Fall eine ganze Zahl) zurück, also ist es hier nutzlos.

Eine (schnelle!) Möglichkeit, das Ergebnis auszugeben:COPY .