我需要从特定日期减去一些工作日(1-15天),例如从2013-12-27
减去 5 个工作日应该返回2013-12-20
,是否有一种简单的方法可以做到这一点?
答案 0 :(得分:6)
这样做的一种方法是预先创建一个包含几年所有日期的表格,然后从该表格中进行选择。通过这种方式,您可以标记周六,周日,节假日等。
答案 1 :(得分:3)
这篇文章解释了如何使用递归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已经提到的那样,使用日历表。