我去年的整个销售日期(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周的总定义。)
我想知道是否有人可以帮助我。
答案 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;