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

(我不能使用 ww. 格式,因为我的第 4 周不符合 Oracle SQL Developer 中第 4 周的始终定义。)

我想知道是否有人可以帮助我。

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 回答