如何从工作日中排除假期

时间:2018-11-16 05:13:36

标签: sql-server-2008

我有一个SQL查询,正在计算编号。个工作日和过去的工作日数,但我无法将假期排除在外。对于11月,我想将11月22日排除在假期之外。这将使11月的工作日为21天。我不知道如何使用CTE保留日历。由于无法在数据库中创建任何新表。或者,如果没有CTE,还有其他方法可以做到这一点。任何帮助表示赞赏。

with dates as(
    select dateadd(d,-day(getdate())+1,convert(date,getdate())) as startofmonth,
    dateadd(d,-1,dateadd(m,1,dateadd(d,-day(getdate())+1,convert(date,getdate())))) as endofmonth,
    convert(date,getdate()) as today
)
,daycounts as(
    select dates.*,

       (DATEDIFF(dd, startofmonth, endofmonth) + 1)
      -(DATEDIFF(wk, startofmonth, endofmonth) * 2)
      -(CASE WHEN DATENAME(dw, startofmonth) = 'Sunday' THEN 1 ELSE 0 END) 
      -(CASE WHEN DATENAME(dw, endofmonth) = 'Saturday' THEN 1 ELSE 0 END) as wkdaysinmonth,

       (DATEDIFF(dd, startofmonth, today) + 1)
      -(DATEDIFF(wk, startofmonth, today) * 2)
      -(CASE WHEN DATENAME(dw, startofmonth) = 'Sunday' THEN 1 ELSE 0 END) 
      -(CASE WHEN DATENAME(dw, today) = 'Saturday' THEN 1 ELSE 0 END) as wkdaystodate

    from dates

谢谢。

0 个答案:

没有答案