Db2 计算两个日期之间的天数,周末除外

Db2 计算两个日期之间的天数,周末除外,db2,difference,days,weekend,Db2,Difference,Days,Weekend,在DB2中,除了周末之外,我如何找到两个日期之间的差异 在DB2中有什么函数可以做到这一点吗?或者我需要自己写一个查询吗?没有这样的函数。但是,编写一个计算以下内容的查询很容易: with cal(d) as ( values date('2015-01-01') -- start_date union all select d + 1 day from cal where d < '2015-01-15' -- end_date ) sel

在DB2中,除了周末之外,我如何找到两个日期之间的差异


在DB2中有什么函数可以做到这一点吗?或者我需要自己写一个查询吗?

没有这样的函数。但是,编写一个计算以下内容的查询很容易:

with cal(d) as ( 
    values date('2015-01-01') -- start_date 
    union all 
    select d + 1 day from cal 
    where d < '2015-01-15'    -- end_date 
) select count(case when dayofweek(d) between 2 and 6 then 1 end) 
  from cal;

如果您进行了大量此类计算,您可能希望创建一个日历表,您可以在此表中添加国家假日等属性。

这是实现两个日期之间差异的最佳方法,不包括周末意味着周六和周日,也不包括国家假日

/****** *首先,我们将使用一些功能扩展date对象。 *我们将添加.each函数和.adjust函数。 *.每一个都将使我们能够在两个日期之间循环,无论 *按“天”、“周”或“月”。 *.调整将允许我们按给定的单位移动给定的一天。这是用来 *类似于:currentDate。调整“天”,1增加一天。 ******/ Date.prototype.each=函数enddate,part,step,fn,bind{ var fromDate=new Datethis.getTime, toDate=new DateendDate.getTime, pm=fromDate 0{ //我们有假期,告诉用户他们的情况。。。 除外责任+=及以下节假日:;
forvar i=0;i您可以使用此函数:

DAYOFWEEK(CURRENT_DATE)
以下计算将返回两个日期之间的工作日数:

[Week(End Date) - Week(Start Date)] * 5 + [DayofWeek(Start Date) - DayofWeek(End Date)]
这仅在“周”和“日”的函数或等效函数是数据库驱动程序的本机函数时才起作用。客户端访问和Sybase本机连接都支持这些函数

Week函数将给出所选年份周的整数值。DayofWeek将给出所选日期1-7之间的整数值


您需要一个日历表,句号。请注意,DAYOFWEEK…根据区域设置给出结果;如果OP表示周六/周日,则DAYOFWEEK_ISO…更可取。如果下面的答案有用,您应该接受它。它也会给您一点声誉加成;