ITPub博客

首页 > 数据库 > Oracle > Orace自定义“周”的开始和结束时间

Orace自定义“周”的开始和结束时间

原创 Oracle 作者:ITtomilk 时间:2015-12-04 10:33:21 0 删除 编辑
日常学习小知识记录。

原文出处: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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-05-25

  • 博文量
    42
  • 访问量
    78461