日常学习小知识记录。
原文出处: http://www.itpub.net/thread-1944374-1-1.html
一、业务需求
业务上规定本周五到下周四为一个“周”,需求是任意给出一段时间,比如2015.10.01 -2015.12.23,按周汇总数据,也就是这段时间的:
第一周 100
第二周 150
第三周 160
.......
注意如果开始和结束的一周不足7天就不要统计了,忽略掉。就是要完整的周。例如10.01是周四,就不管它了,从10.02开始统计,到10.08算第一周。
怎么能标记出所给时间段的每一天算是第几周呢?谢了。
解决方法:
这个例子告诉你怎么算出掐头去尾的起止日期,然后又根据起始日期算出第几周:
(命令窗口执行)
VAR V_START VARCHAR2(10);
VAR V_END VARCHAR2(10);
EXEC :V_START:='2015.10.01';
EXEC :V_END:='2015.12.23';
WITH date_range as (
SELECT D1+5-W1 D1
,CASE WHEN W2>=4 THEN D2-(W2-4) ELSE D2-(W2+7-4) END D2
FROM (select TO_DATE(:V_START,'YYYY.MM.DD') D1 ---开始时间格式调整
,to_char(TO_DATE(:V_START,'YYYY.MM.DD'),'DAY','NLS_DATE_LANGUAGE=''numeric date language''') W1 ---获取开始时间是周几
,TO_DATE(:V_END,'YYYY.MM.DD') D2
,to_char(TO_DATE(:V_END,'YYYY.MM.DD'),'DAY','NLS_DATE_LANGUAGE=''numeric date language''') W2
FROM DUAL
)
)
SELECT the_date,ceil((the_date-d1+1)/7) the_week
FROM (
SELECT D1+LEVEL-1 the_date,d1
FROM date_range
CONNECT BY LEVEL<=D2-D1+1
)
;
原文出处: http://www.itpub.net/thread-1944374-1-1.html
一、业务需求
业务上规定本周五到下周四为一个“周”,需求是任意给出一段时间,比如2015.10.01 -2015.12.23,按周汇总数据,也就是这段时间的:
第一周 100
第二周 150
第三周 160
.......
注意如果开始和结束的一周不足7天就不要统计了,忽略掉。就是要完整的周。例如10.01是周四,就不管它了,从10.02开始统计,到10.08算第一周。
怎么能标记出所给时间段的每一天算是第几周呢?谢了。
解决方法:
这个例子告诉你怎么算出掐头去尾的起止日期,然后又根据起始日期算出第几周:
(命令窗口执行)
VAR V_START VARCHAR2(10);
VAR V_END VARCHAR2(10);
EXEC :V_START:='2015.10.01';
EXEC :V_END:='2015.12.23';
WITH date_range as (
SELECT D1+5-W1 D1
,CASE WHEN W2>=4 THEN D2-(W2-4) ELSE D2-(W2+7-4) END D2
FROM (select TO_DATE(:V_START,'YYYY.MM.DD') D1 ---开始时间格式调整
,to_char(TO_DATE(:V_START,'YYYY.MM.DD'),'DAY','NLS_DATE_LANGUAGE=''numeric date language''') W1 ---获取开始时间是周几
,TO_DATE(:V_END,'YYYY.MM.DD') D2
,to_char(TO_DATE(:V_END,'YYYY.MM.DD'),'DAY','NLS_DATE_LANGUAGE=''numeric date language''') W2
FROM DUAL
)
)
SELECT the_date,ceil((the_date-d1+1)/7) the_week
FROM (
SELECT D1+LEVEL-1 the_date,d1
FROM date_range
CONNECT BY LEVEL<=D2-D1+1
)
;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30260000/viewspace-1853206/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30260000/viewspace-1853206/