oracle sql中每周调整一周

时间:2013-09-14 11:57:18

标签: sql oracle

我去年的整个销售日期(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周的总定义。)

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

2 个答案:

答案 0 :(得分:3)

试试这个表达式:

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

注意:

  • EXTRACT从日期中提取日期
  • TRUNC( (x + 6) / 7)将其除以七天,并将其截断为整数
  • LEAST( x, 4 )将其限制为最多4

答案 1 :(得分: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;