[pgsql-jp: 32641] Re: 一定期間内の曜日の数の取得

Naoki.Kuniyoshi. nao_k @ din.or.jp
2004年 4月 1日 (木) 17:25:11 JST


Kuniyoshiです。

 あ、実テーブルにあるデータからカウントしてるのではないのですね。
 勘違いしていました。

 ちょっと、簡単ですが、PL/pgSQLで関数を作ってみました。
 単純にループしてカウントしてるだけですが、こんなんでも良いのでしょうか?
 テスト不足かもしれないので、チェックしてください。
 SQLだけでやろうとしたんですが、
 edate - sdateで、日数を求めて、その日数の7で割った数だけ日曜日が最低
 あることになり、開始日と終了日付近の日曜日のチェックで誤差を正せば、
 ご希望のSQLだと思いますが、そこが面倒だったのでこんな逃げにしました。
 一ヶ月程度の期間ならそうそう負荷にならないかと(汗

 また、dual表は、Oracleでもただの表なので、
 create table dual (dummy varchar(1));
  insert into dual values('X');
  で同じく作れます。
 select で値がすぐ取れるから、作る必要はないですけどね(汗

create function sunnum(date, date) returns int4 as '
declare
	sdate alias for $1;
	edate alias for $2;
	cnt int4 := 0;
	totalday int4;
	i int4;
begin
	totalday := edate - sdate;
	for i in 0..totalday loop
		if date_part(''dow'', sdate + i) != 0 then
			cnt := cnt + 1;
		end if;
	end loop;
	return cnt;
end;'
language 'plpgsql';

select sunnum('2004-02-20', '2004-03-20');

>ご返答ありがとうございます。
>
>> select count(*)
>>   from quser
>このquserというテーブルはどのように作られている
>のでしょうか?
>oracleでいうdual表がないのでどのように記述したらいいのか。。。
>(過去に話題になっていましたが)

--
Naoki.Kuniyoshi.(mailto:nao_k @ din.or.jp)




pgsql-jp メーリングリストの案内