[pgsql-jp: 32642] Re: 一定期間内の曜日の数の取得
Naoki.Kuniyoshi.
nao_k @ din.or.jp
2004年 4月 1日 (木) 18:11:12 JST
Kuniyoshiです。
> SQLだけでやろうとしたんですが、
> edate - sdateで、日数を求めて、その日数の7で割った数だけ日曜日が最低
> あることになり、開始日と終了日付近の日曜日のチェックで誤差を正せば、
> ご希望のSQLだと思いますが、そこが面倒だったのでこんな逃げにしました。
一応、ループじゃない計算だけのやつを作ってみました。
チェックがいい加減かも(汗
汚いコードなので、あくまで参考ということで(汗
同じ事を、SQLだけでやるなら、case句を使えば可能だとは思います。
create function sunnum2(date, date) returns int4 as '
declare
sdate alias for $1;
edate alias for $2;
totalday int4 := 0;
totalsun int4 := 0;
work int4 := 0;
result int4 := 0;
begin
totalday := edate - sdate + 1;
work := totalday;
work := work + date_part(''dow'', sdate);
if date_part(''dow'', edate) != 0 then
work := work + (7 - date_part(''dow'', edate));
end if;
totalsun := (work / 7) + 1;
if date_part(''dow'', sdate) != 0 then
totalsun := totalsun - 1;
end if;
if date_part(''dow'', edate) != 0 then
totalsun := totalsun - 1;
end if;
result := totalday - totalsun;
return result;
end;'
language 'plpgsql';
select sunnum2('2004-02-20', '2004-03-20');
--
Naoki.Kuniyoshi.(mailto:nao_k @ din.or.jp)
pgsql-jp メーリングリストの案内