0

昨年全体 (2012 年 1 月 1 日から 2012 年 12 月 31 日) の販売日があります。月間で 4 週間しか一致しないような方法で週変数を作成したいと考えています。

というか、欲しい

01/01/2012-01/07/2012  = week1
01/08/2012-01/14/2012  = week2
01/15/2012-01/21/2012  = week3
01/22/2012-01/31/2012  = week4

(私の週 4 は、Oracle SQL Developer の週 4 の常に定義に適合しないため、ww. 形式は使用できません。)

誰かがこれについて私を助けることができるかどうか疑問に思っています。

4

2 に答える 2

3

次の表現を試してください。

select LEAST(TRUNC((EXTRACT(day FROM salesdate) + 6) / 7), 4) week
FROM salesdata;

ノート:

  • EXTRACT日付から日を抽出します
  • TRUNC( (x + 6) / 7)それを 7 日で割り、整数に切り捨てます。
  • LEAST( x, 4 )最大 4 に制限します
于 2013-09-14T12:34:24.833 に答える
1

先週は 9 日間だったので、ちょっと変ですね...

しかし、次のようなことを試すことができます:

CREATE OR REPLACE FUNCTION GET_WEIRD_WEEK(I_DATE DATE) 
 RETURN NUMBER AS
BEGIN
  RETURN CASE
           WHEN FLOOR(TO_CHAR(I_DATE,'DD')/7)+1 > 3
             THEN 4
             ELSE FLOOR(TO_CHAR(I_DATE,'DD')/7)+1
         END;
END;

それ以外の場合は、月の四半期全体で日を均等に分散することをお勧めします。

CREATE OR REPLACE FUNCTION GET_WEIRD_WEEK(I_DATE DATE) RETURN NUMBER AS
BEGIN
  RETURN FLOOR(TO_CHAR(I_DATE,'DD')/TO_CHAR(LAST_DAY(I_DATE),'DD')*4)+1;
END;
于 2013-09-14T12:38:09.010 に答える