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