[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 メーリングリストの案内