SQL - 从工作日找工作日

时间:2017-10-09 15:29:16

标签: sql sql-server date dayofweek

我们有一张包含资源和日期的表格。他们的工作。例如,一个人可以在星期一到星期五工作,但另一个人只能工作两周。 这是数据:

WorkOnSunday    WorkOnMonday    WorkOnTuesday   WorkOnWednesday WorkOnThursday  WorkOnFriday    WorkOnSaturday
--------------------------------------------------------------------------------------------------------------
0               1               1               1               1               1               0
0               0               1               1               0               0               0

(对于缺少格式化而道歉,但屏幕截图不会通过我们该死的代理上传。)

所以问题是,如何使用上述数据获得一个月内的工作天数? (假期是下一个阶段。我试图抓住我们显然拥有的假期表)

这是我到目前为止所做的:

DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2017/12/01'
SET @EndDate = '2018/01/01'


SELECT
   (DATEDIFF(dd, @StartDate, @EndDate))
  -(DATEDIFF(wk, @StartDate, @EndDate) * 2)
  -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END)
  -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)

这为我提供了正确的工作日数量

1 个答案:

答案 0 :(得分:1)

您需要先查明当月发生的每天有多少,
以下查询可以帮助您。

declare @from datetime= '2017/12/01' 
declare @to datetime  = '2018/01/01'

select 
 datediff(day, -7, @to)/7-datediff(day, -6, @from)/7 AS MON,
 datediff(day, -6, @to)/7-datediff(day, -5, @from)/7 AS TUE,
 datediff(day, -5, @to)/7-datediff(day, -4, @from)/7 AS WED,
 datediff(day, -4, @to)/7-datediff(day, -3, @from)/7 AS THU,
 datediff(day, -3, @to)/7-datediff(day, -2, @from)/7 AS FRI,
 datediff(day, -2, @to)/7-datediff(day, -1, @from)/7 AS SAT,
 datediff(day, -1, @to)/7-datediff(day, 0, @from)/7 AS SUN

一旦你拥有了,你可以在你的桌子上做你的计数