我有一张表格,其中指定了日期(日期时间)和已解决的日期(日期时间)。
我正在尝试计算工作时间和周末不包括的时间(以秒为单位)。
工作时间为周一至周五09:00:00.000000至17:30:00.000000。
因此,如果项目在星期五的16:00:00.000000分配,并在周一10:30:00.000000解决,则总耗用时间为3小时或180分钟或10,800秒。
我看到一些帖子排除了周末时间而不是工作时间---非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
你可以试试这个:
select datediff(hh, @d1, @d2) - (datediff(wk, @d1, @d2) * 2 * 8.5) - datediff(dd, @d1, @d2) * (24-8.5)
答案 1 :(得分:0)
虽然可以在单个表达式中完成所有这些操作,但我不会尝试这样做。太多潜在的人为错误(包括转录错误),非常冗长,并且难以调试或修改。
相反,如果我不得不返回已经计算过的数据集,我会在T-SQL中将其作为用户定义的函数。如果我要显示它或生成包含此信息的报告,我会考虑在代码中执行此操作。但是用户定义的T-SQL函数将是最灵活的解决方案,我将授予它。
我手头还没有这样的东西,所以我会给你一个算法。
假设我们有两个日期时间值,@ Date1和@ Date2。我们假设@ Date1< @日期2。我们还假设@ Date1和@ Date2都在工作日和工作时间内。
如果@ Date1和@ Date2在同一天,请返回@ Date1和@ Date2之间的秒数差异。
让@firstMorning成为@ Date1之后的第一个上午9点。如果@ Date1是在上午9点,那么@ firstMorning = @ Date1。
让@lastMorning成为@firstMorning之后和@ Date2之前的最后9点。 (基本上是@ Date2的开始时间。)
让@workWeeks = @firstMorning和@lastMorning之间的周一至周五周数。
让@firstWeekDays = @firstMorning +同周周五上午9:00之间的天数。如果@firstMorning =星期五上午9:00,请将@firstWeekDays设置为0。
让@lastWeekDays =上周一上午9:00到@lastMorning之间的天数。如果@lastMorning =星期一上午9:00,请将@lastWeekDays设置为0。
让@SecondsPerDay = 8.5 * 3600。
返回(@workWeeks * 5 * @SecondPerDay)+ (@firstWeekDays * @SecondPerDay)+(@ Date1和@ Date1之间的5:30之间的秒数)+(@lastWeekDays * @SecondPerDay)+(@lastMorning和@ Date2之间的秒数)
请注意,此逻辑尚未经过代码测试:如果有,我会给你代码。 :)