今さら知ったんですが、こんな便利な関数があったんですね。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
