[pgsql-jp: 28797] Re: ある日付から期間を抽出するアイディアを下さい。
Chie.M
gontakun @ fish.co.jp
2003年 1月 27日 (月) 17:29:00 JST
Chieと申します。
> 年度(integer):2002
・・・
> 前月の最終日(date):2002/12/31
・・・
> 今月末日(date):2003/01/31
・・・
> この3つの情報から下記のような結果を出力出来るSQL文が何かない物かと思い投稿い
> たしました。
>
> 2002/04
> ・
> 2003/01
> 2003/02
> 2003/03
>
> あるいは
>
> 2002/04/01
> 2003/03/31
出力結果の意味が良くわからないのですが、要するに
日付の演算をしたいと言うことでしょうか?
年度ごとに4月から順にソートさせたりとか??
それとも、2002の値からを入れたら、該当年度の全ての月の値を
表示させるとか?
いずれにせよ、PL/pgSQL等を使って
関数をを作っておけばよいのではないでしょうか?
例えばこんな感じの↓(適当に作ったので、見本としては最悪かも(^_^;))
------------------------------------------------------
CREATE OR REPLACE FUNCTION fnc_test_nendo_start(timestamp)
RETURNS char(6) AS '
-- 指定日付から年度の開始月を求める
DECLARE
mydate ALIAS FOR $1;
mymonth int4;
mynendo char(8);
BEGIN
mymonth := date_part(''month'', mydate);
If mymonth BETWEEN 1 And 3 Then
mynendo := date_part(''year'', (mydate - interval ''1 year''))::text
|| ''04'';
Else
mynendo := date_part(''year'', mydate)::text || ''04'';
End If;
RETURN mynendo;
END;
'
LANGUAGE 'plpgsql';
SELECT fnc_test_nendo_start('2003-01-05');
------------------------------------------------------
この結果は200204が返って来ます。
例えば、ビューに表示させたい場合は、
こういう関数をいくつか作って組み合わせたものを使ったり、
ルールを使って実行させれば、思うような結果が取得できる
のではないでしょうか?
----------------------------
Chie.M <gontakun @ fish.co.jp>
※メールアドレス変わりました。
pgsql-jp メーリングリストの案内