我正在使用此查询来获取所用时间。
SELECT DATEDIFF(dd, ActualStartDate, ActualCompletionDate) AS TimeTaken
FROM TableName
现在我想排除周末,只包括周一至周五作为计算天数。
最佳答案
下面的示例查询,这里是我如何解决它的一些详细信息。
使用 DATEDIFF(WK, ...)
将为我们提供两个日期之间的周数。 SQL Server 将其评估为周数之间的差异,而不是基于天数。这是完美的,因为我们可以用它来确定日期之间经过了多少个周末。
因此,我们可以将该值乘以 2 来获取周末的天数,然后从 DATEDIFF(dd, ...)
中减去该值来获取工作日的天数。
但是,当开始日期或结束日期是星期日时,这并不能 100% 正确。因此,我在计算末尾添加了某些情况逻辑来处理这些实例。
您可能还需要考虑 DATEDIFF
是否应完全包含在内。例如9/10 和 9/11 之间的差异是 1 天还是 2 天?如果是后者,您需要在最终产品中加 1。
declare @d1 datetime, @d2 datetime
select @d1 = '9/9/2011', @d2 = '9/18/2011'
select datediff(dd, @d1, @d2) - (datediff(wk, @d1, @d2) * 2) -
case when datepart(dw, @d1) = 1 then 1 else 0 end +
case when datepart(dw, @d2) = 1 then 1 else 0 end
关于sql-server-2005 - 使用 sql server 获取不包括周末的 DATEDIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388420/