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