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