sql >> Databasteknik >  >> RDS >> PostgreSQL

Välja arrayer i snyggt utskrivet format i SQL

Det finns flera sätt. Ett sätt är att casta arrayen till text och dela upp den med regexp_split_to_table () .
Denna funktion finns i PostgreSQL 8.3 eller senare .

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

Utdata:

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

Om du vill ha de omslutande parenteserna (kanske inte?), lägg till dem igen så här:

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

Vårt resultat:

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

Alternativ:

Detta bör också fungera med PostgreSQL 8.2 eller kanske till och med tidigare, men det testade jag inte.

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

Utdata:

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

(Du kanske vill ta bort några krulliga parenteser ..)

Annars skulle jag skriva en plpgsql-funktion som loopar genom arrayen. Ganska lätt.

Det finns också den relaterade unnest() funktion, men den returnerar en rad per baselement (heltal i det här fallet), så det är ingen användning här.

Ett (snabbt!) sätt att mata ut resultatet:COPY .




  1. Inaktivera inloggningsutlösare i Oracle

  2. Ogiltig syntaxfeltyp=MyISAM i DDL genererad av Hibernate

  3. Hur startar man Postgres server?

  4. Hur får jag MySQL autoincrement-primärnyckeln från Sequelize på save()?