注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

plsql 计算两个日期之间的工作日天数-除去(周末和公共假日)  

2013-03-11 19:12:07|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      原因是这篇文章http://blog.sina.com.cn/s/blog_6b6ba82d0100lxcv.html。里面讲了标题所述问题的解决方法:
CREATE OR REPLACE FUNCTION calcDates(START_DATE IN DATE, END_DATE IN DATE)
  RETURN number IS
  No_of_DAYS number;
BEGIN

  IF START_DATE < END_DATE THEN
    SELECT count(1) days
      INTO NO_OF_DAYS
      FROM (SELECT DISTINCT trunc(START_DATE) + level - 1 dayList
              FROM dual
            connect BY trunc(START_DATE) + level - 1 < = trunc(END_DATE)) A
     where not exists (select 1
              from dp_tbl_public_holiday b
             where to_date(b.ph_date, 'YYYYMMDD') = A.dayList)
       and to_char(dayList, 'D') not in (1, 7);
  ELSE
    SELECT 0 - count(1) days
      INTO NO_OF_DAYS
      FROM (SELECT DISTINCT trunc(END_DATE) + level - 1 dayList
              FROM dual
            connect BY trunc(END_DATE) + level - 1 < = trunc(START_DATE)) A
     where not exists (select 1
              from dp_tbl_public_holiday b
             where to_date(b.ph_date, 'YYYYMMDD') = A.dayList)
       and to_char(dayList, 'D') not in (1, 7);
  END IF;

  Return No_of_DAYS;
END;

      但是实现原理没有讲清楚。
dp_tbl_public_holiday 存储着 假期的性息, ph_date 假期的日期
not in (1, 7)就是不在周六或者周日, 1是周日, 7是周六
这两条就不用讲了,主要是CONNECT BY LEVEL的用法没有讲清楚。level 是个伪列,类似于rownum,connect by 构造了一个循环。但level不仅仅每次+1那样子,connect by是构造递归查询,每个结果的层级+1,每个层级不一定都只有一条数据,可能会某个层级下有多条数据的。

http://www.cnblogs.com/caroline/archive/2011/12/25/2301083.html 这里有条语句的查询结果很好的说明了问题
SELECT LEVEL 等级, E.*
  FROM EMP E
CONNECT BY PRIOR E.EMPNO = E.MGR
 START WITH E.EMPNO = 7839
plsql 计算两个日期之间的工作日天数-除去(周末和公共假日) - ljhzzyx - 怀念外婆屋后的柚子树
  评论这张
 
阅读(972)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017