sql >> Database >  >> RDS >> PostgreSQL

Arrays in mooi gedrukt formaat selecteren in SQL

Er zijn verschillende manieren. Een manier is om de array naar tekst te casten en op te splitsen met regexp_split_to_table () .
Deze functie is aanwezig in PostgreSQL 8.3 of hoger .

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

Uitgang:

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

Als je de omsluitende haakjes wilt (misschien niet?), voeg ze dan als volgt toe:

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

Onzetput:

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

Alternatief:

Dit zou ook moeten werken met PostgreSQL 8.2 of misschien zelfs eerder, maar dat heb ik niet getest.

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

Uitgang:

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

(Misschien wil je wat accolades verwijderen ..)

Anders zou ik een plpgsql-functie schrijven die door de array loopt. Redelijk eenvoudig.

Er is ook de gerelateerde unnest() functie, maar het retourneert een rij per basiselement (in dit geval een geheel getal), dus het heeft hier geen zin.

Een (snelle!) manier om het resultaat uit te voeren:COPY .




  1. Zelfstudie over SQL Server-tabelpartitionering en partities

  2. Een lijst<> invoegen in de SQL Server-tabel

  3. Aangepaste op triggers gebaseerde upgrades voor PostgreSQL

  4. dbms_output grootte buffer overloop