【发布时间】:2017-07-13 11:06:33
【问题描述】:
我正在尝试计算不包括周末的两个日期之间的差异,并且只计算从晚上 8 点到早上 6 点的时间。我想计算以天、小时和分钟为单位的差异。
为此我有这个:
DECLARE @Start_Date DATETIME
DECLARE @End_Date DATETIME
SET @Start_Date = '2017-06-23 10:43:41.000'
SET @End_Date = '2017-06-27 11:58:52.000'
SELECT (DATEDIFF(dd, @Start_Date, @End_Date) + 1)
-(DATEDIFF(wk, @Start_Date, @End_Date) * 2)
-(CASE WHEN DATENAME(dw, @Start_Date) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @End_Date) = 'Saturday' THEN 1 ELSE 0 END) AS [Time to First Atualization- Days],
datediff(hour, @Start_Date, @End_Date) - (datediff(wk, @Start_Date, @End_Date) * 48) -
case when datepart(dw, @Start_Date) = 1 then 1 else 0 end +
case when datepart(dw, @End_Date) = 1 then 1 else 0 end AS [Time to First Atualization- Hours],
datediff(minute, @Start_Date, @End_Date) - (datediff(wk, @Start_Date, @End_Date) * 2880) -
case when datepart(dw, @Start_Date) = 1 then 1 else 0 end +
case when datepart(dw, @End_Date) = 1 then 1 else 0 end AS [Time to First Atualization- Minutes]
查询返回正确值的天数但计算小时数和分钟数是错误的......
我该如何解决这个问题?
谢谢!
【问题讨论】:
-
你能解释一下你在查询中的逻辑是什么吗?
-
我想知道员工在工作时间内的工作日数、小时数和分钟数。他只在工作日工作,并且安排在晚上 8 点和早上 6 点之间。
-
@PedroAlves 如果我运行你的脚本,我有 49 个。你在期待什么?
-
我期待 21 小时。原因:第一天 8 小时(上午 10 点至下午 6 点)+ 第二天 10 小时 - 2017 年 7 月 26 日(上午 8 点至下午 6 点)+ 第三天 3 小时 2017 年 7 月 27 日 - 上午 8 点至下午 6 点(上午 8 点至晚上 11 点)
-
您在第二条评论中写了 8pm(实际上是 8am)和 6am(实际上是 6pm)
标签: sql-server tsql datediff