今さら知ったんですが、こんな便利な関数があったんですね。PostgreSQL8.0から追加された関数らしく、これを使えば連番やカレンダーテーブルを簡単に作成することができる。うわー、もっと早く知っておきたかった!朝から大興奮!
例えば、1~10までの項番を作成する場合。
SELECT * FROM generate_series(1,10);
generate_series ----------------- 1 2 3 4 5 6 7 8 9 10 (10 rows)
今週の日曜~土曜の一覧を生成する場合。
SELECT current_date + s.a AS date FROM generate_series( (SELECT 0-extract(dow FROM current_date))::int, (SELECT 6-extract(dow FROM current_date))::int ) AS s(a);
date ------------ 2008-04-13 2008-04-14 2008-04-15 2008-04-16 2008-04-17 2008-04-18 2008-04-19 (7 rows)
これまでプログラムでごりごり頑張っていた部分のいくつかは、generate_series を使うことで、SQLだけで書けるようになる。プログラムで SQL の足りないところを補おうとすると、非常にややこしや~なことになりがちなので、AP と DB の関係を疎にするアイデアとして、generate_series は良いと思います。PostgreSQL の方言というのが、たまにキズですが…。
このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/478