【发布时间】:2016-02-11 08:41:52
【问题描述】:
在迪拜,标准的周末是从周五到周六,而不是传统的周六/周日。
我正在尝试计算两个给定日期之间的工作日数量,这是我拥有的代码;
DATEDIFF(dd, DATEADD(hour, DATEDIFF(hh, getdate(), getutcdate()), @StartDate),
DATEADD(hour, DATEDIFF(hh, getdate(), getutcdate()), @EndDate)+1)
-
(
(DATEDIFF(wk, @StartDate, @EndDate) * 2
+(CASE WHEN DATENAME(dw, @StartDate) = 'Saturday' then 1 else 0 end)
+(CASE WHEN DATENAME(dw, @EndDate) = 'Friday' then 1 else 0 end)
))
)
但是它计算的天数有误。例如; 当开始日期为 02-03-2016 并且结束日期为 02-06-2016 时,返回为 4,但应该是2.
当开始日期为 02-03-2016 而结束日期为 02-07-2016 时,结果为 3,即正确。
【问题讨论】:
-
标记使用的 dbms。 DATEDIFF 是特定于产品的!
-
您可以轻松地创建一个日历表,例如,每天一行和一列指示特定日期是否为工作日。针对这样的表编写查询很容易,您可以实现任何您想要的规则。
标签: sql sql-server-2008