SQL - 从工作日中查找工作日
SQL - Finding working days from days worked
我们有一个 table,其中包含资源及其工作的天数。例如,一个人可以在周一至周五工作,而另一个人只能在该周工作两天。
这是数据:
WorkOnSunday WorkOnMonday WorkOnTuesday WorkOnWednesday WorkOnThursday WorkOnFriday WorkOnSaturday
--------------------------------------------------------------------------------------------------------------
0 1 1 1 1 1 0
0 0 1 1 0 0 0
(抱歉缺少格式,但屏幕截图不会通过我们该死的代理上传。)
那么问题来了,如何使用上面的数据得到一个月的工作天数呢?
(假期是下一个阶段。我正试图掌握我们显然拥有的假期 table)
这是我目前的情况:
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)
这给了我一个月中正确的工作日数量
您需要先了解您的月份每天有多少天,
以下查询可以帮助您。
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
完成后,您可以在 table
中进行计数
我们有一个 table,其中包含资源及其工作的天数。例如,一个人可以在周一至周五工作,而另一个人只能在该周工作两天。 这是数据:
WorkOnSunday WorkOnMonday WorkOnTuesday WorkOnWednesday WorkOnThursday WorkOnFriday WorkOnSaturday
--------------------------------------------------------------------------------------------------------------
0 1 1 1 1 1 0
0 0 1 1 0 0 0
(抱歉缺少格式,但屏幕截图不会通过我们该死的代理上传。)
那么问题来了,如何使用上面的数据得到一个月的工作天数呢? (假期是下一个阶段。我正试图掌握我们显然拥有的假期 table)
这是我目前的情况:
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)
这给了我一个月中正确的工作日数量
您需要先了解您的月份每天有多少天,
以下查询可以帮助您。
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
完成后,您可以在 table
中进行计数