[pgsql-jp: 32586] Re: 週単位の件数取得
Nakagawa Yasuharu
yasuharu.nakagawa @ jp.yokogawa.com
2004年 3月 26日 (金) 09:33:20 JST
こんにちは 中川@東京武蔵野です
In Message-ID <001301c41279$91cb9e80$0a01a8c0 @ yneko>,
"Mao Morimoto" <yneko2 @ yamamaya.com> writes on Thu, 25 Mar 2004 23:57:37 +0900 ...
> ふと思ったのですけど・・
> extract(week)は「年の第何週」ですから、そのままだと、データが1年以上あると
> NGですね。extract(year)と組み合わせてgroupしなくちゃいけなさそう。
2000年や2004年の12が下記のとおりになっていますので、
年と週を含めた関数を作ってあげた方がやりやすいかも知れませんね。
> cal 12 2000
December 2000
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
> cal 12 2004
December 2004
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
===
create or replace function yw( date ) returns integer as '
declare
dd alias for $1 ;
yr integer ;
mn integer ;
wk integer ;
ret integer ;
begin
yr := date_part( ''year'', dd ) ;
mn := date_part( ''month'', dd ) ;
wk := date_part( ''week'', dd ) ;
if wk = 1 and mn = 12 then
yr := yr + 1 ;
end if ;
if wk >= 52 and mn = 1 then
yr := yr - 1 ;
end if ;
ret := yr * 100 + wk ;
return ret ;
end ;
' language 'plpgsql' ;
===
test=# select yw( '20011231'::date ) ;
yw
--------
200201
(1 row)
test=# select yw( '20041231'::date ) ;
yw
--------
200453
(1 row)
test=# select yw( '20050101'::date ) ;
yw
--------
200453
(1 row)
===
--
pgsql-jp メーリングリストの案内