sql-server-2005 - 使用 sql server 获取不包括周末的 DATEDIFF

标签 sql-server-2005

我正在使用此查询来获取所用时间。

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/

相关文章:

database - SQL Server - 使用带交集的计数函数

sql - 执行 SQL Server 脚本

sql-server - 将 SQL 查询存储在 sql server 的表中

sql - 用于测试主键是否存在的脚本

sql - 在SQL Server 2005 DB上使用Auto Create Statistics =“ON”是否有用?

SQL从行数据而不是列数据中选择最小值

sql - 重新排列sql server中的列顺序

sql-server - 无主键的聚集索引

php - MS SQL try catch 在被 php mssql_query 执行时被忽略

sql - 在 Where 子句中使用 "CASE"来选择各种列会损害性能