PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Selezione di array in un formato ben stampato in SQL

Ci sono diversi modi. Un modo è trasmettere l'array al testo e dividerlo con regexp_split_to_table () .
Questa funzione è presente in PostgreSQL 8.3 o versioni successive .

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

Uscita:

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

Se vuoi le parentesi di chiusura (forse no?), aggiungile di nuovo in questo modo:

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

Il nostro contributo:

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

Alternativa:

Questo dovrebbe funzionare anche con PostgreSQL 8.2 o forse anche prima, ma non l'ho testato.

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

Uscita:

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

(Puoi rimuovere alcune parentesi graffe ..)

Altrimenti, scriverei una funzione plpgsql che scorre l'array. Abbastanza facile.

C'è anche il relativo unnest() funzione, ma restituisce una riga per elemento base (intero in questo caso), quindi non serve qui.

Un modo (veloce!) per produrre il risultato:COPY .