从特定日期减去营业日

时间:2013-12-28 01:40:01

标签: sql sql-server tsql

我需要从特定日期减去一些工作日(1-15天),例如从2013-12-27减去 5 个工作日应该返回2013-12-20,是否有一种简单的方法可以做到这一点?

3 个答案:

答案 0 :(得分:6)

这样做的一种方法是预先创建一个包含几年所有日期的表格,然后从该表格中进行选择。通过这种方式,您可以标记周六,周日,节假日等。

答案 1 :(得分:3)

这篇文章解释了如何使用递归CTE来实现它:

Business Days Calc Using Recursive CTE

答案 2 :(得分:2)

DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2013/10/01'
SET @EndDate = '2013/10/31'


SELECT
   (DATEDIFF(dd, @StartDate, @EndDate) + 1)
  -(DATEDIFF(wk, @StartDate, @EndDate) * 2)
  -(CASE WHEN DATEPART(dw, @StartDate) = 1 THEN 1 ELSE 0 END)
  -(CASE WHEN DATEPART(dw, @EndDate)   = 7 THEN 1 ELSE 0 END)
                                AS [TotalWorkingDays]

<强>结果

TotalWorkingDays
23

重要提示

  

如果你愿意,这种方法只会忽略星期六和星期日   排除您需要的国定假日和其他季节性假期   如Zdravko Danev已经提到的那样,使用日历表。