iakioの日記 RSSフィード

2009-02-11

配列を行に分解

| 17:12 | 配列を行に分解 - iakioの日記 を含むブックマーク はてなブックマーク - 配列を行に分解 - iakioの日記

カンマ区切りの文字列を行に分解することはできたけど、単に配列を行に分解することってできたっけ?

=> SELECT ARRAY[10,20,30];
  array
---------
 {10,20,30}
(1 row)
これを
----
 10
 20
 30
(3 rows)
こうしたい

うーん。generate_seriesだろうか。

=> SELECT a[i] FROM
   (SELECT s1.a, generate_series(array_lower(s1.a, 1), array_upper(s1.a, 1)) AS i FROM
   (SELECT ARRAY[10,20,30] AS a) AS s1) AS s2;
 a
----
 10
 20
 30
(3 rows)

できなくはないけど、、、

2/12追記

8.4にはunnest()という関数があるとコメントいただいたので試してみました。バージョンは8.4のRPM版(postgresql-server-8.4devel_20081229-1PGDG.rhel5.1)

=> SELECT * FROM unnest(ARRAY[10, 20, 30]);
 unnest
--------
     10
     20
     30
(3 rows)

これこれ。2次元以上の配列も再帰的に処理してくれる模様です。

=> SELECT * FROM unnest(ARRAY[ARRAY[10, 20], ARRAY[30, 40]]);
 unnest
--------
     10
     20
     30
     40
(4 rows)

pgsqlpgsql2009/02/11 18:418.4でunnest()が追加されてますが、以前のバージョンではそれしかないみたいです。

elfelf2009/02/17 19:55!!!!

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20090211