/*
因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日。
设定是一个星期有5个工作日,从星期一到星期五
说明:
第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天
末一个星期的工作日数:DATEPART(dw, @enddt),最多5天
计算方法:
如果两个日期处在同一个星期内,直接计算“第一个星期的工作日数”
否则按下面的公式计算
(两个日期间的总天数 - 第一个星期的天数 - 末一个星期的天数) / 7 * 5
+ 第一个星期的工作日数
+ 末一个星期的工作日数
*/
--计算并返回两个日期间的工作小时数(工作日*8)按周一到周五计算 --必须先SET DATEFIRST 1 CREATE FUNCTION dbo.CalcWorkHours(@bdate DATETIME, @edate DATETIME) RETURNS INTEGER AS BEGIN DECLARE @hours INTEGER IF @@DATEFIRST <> 1 OR @bdate > @edate RETURN -1 SELECT @hours = --如果终止日期与起始日期在同一个星期内,只需要计算有几天即可 CASE WHEN DATEPART(wk, @edate-1)-DATEPART(wk,@bdate) = 0 THEN CASE WHEN DATEPART(dw, @bdate) > 5 THEN 0 WHEN DATEPART(dw, @edate-1) > 5 THEN 6 - DATEPART(dw, @bdate) ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END --如果终止日期与起始日期在不同的星期内 --首先计算出除前后两个星期外完整的星期数 * 5 ELSE (DATEDIFF(dd,@bdate,@edate) - (8-DATEPART(dw, @bdate)) - DATEPART(dw, @edate-1)) / 7 * 5 --再加上第一个星期里的工作日数 + CASE WHEN DATEPART(dw, @bdate) < 6 THEN 6 - DATEPART(dw, @bdate) ELSE 0 END --加上末一个星期里的工作日数 + CASE WHEN DATEPART(dw, @edate-1)>5 THEN 5 ELSE DATEPART(dw, @edate-1) END END * 8 RETURN @hours END
以上就是本文的全部内容,希望对大家的学习有所帮助。
问题内容: 如何计算SQL Server中两个日期之间的工作日数? 星期一至星期五,它必须是T-SQL。 问题答案: 对于周一至周五的工作日,您可以使用单个SELECT进行操作,如下所示: 如果要包括假期,则必须进行一些调整…
问题内容: 我需要弄清楚DB2中两个日期之间的天数差异。我尝试了几个不同的查询,但似乎没有任何效果。所以基本上我需要得到的是这样的东西。 我知道,如果我删除CHDLM并指定一个类似于“ 2012-02-20”的日期,则它可以工作,但是我需要能够针对表中的该字段运行该日期。我也尝试了一个由朋友给我的查询,该查询也不起作用。 请任何帮助将不胜感激。谢谢 问题答案: 我认为@Siva处于正确的轨道(使用
问题内容: 从上面的代码中,我能够找到两个日期之间员工的总工作日。 但现在我想要其他列名称的总工作日。我想计算两个日期之间的总工作日。 我怎样才能做到这一点? 问题答案: 如果您只想排除周末,则可以通过添加以下条件来简单地使用条件计数排除周末: 因此,您的查询变为: 但是, 我真的建议向您的数据库添加日历表。它使一切变得如此简单,您的查询将变为: 这样,您可以定义公共假期,周末等。它比任何其他解决
问题内容: 有谁知道如何计算两个日期字段之间的工作日数?我正在使用oracle sql开发人员。我需要找到多个开始日期和结束日期之间平日的平均值。因此,我需要获取每条记录的天数,以便对它们进行平均。这可以在查询的一部分中完成吗? 问题答案: 这个答案类似于Nicholas的答案,这并不奇怪,因为您需要一个带有a的子查询以分出日期列表。然后可以在检查星期几的同时对日期进行计数。此处的区别在于,它显示
我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我正在使用NodaTime来实现这一点,但在接下来的几个月里,我遇到了一些问题。 我已经阅读了这里的大部分问题和答案,但没有找到任何我可以从中受益的东西。 大多数时候函数工作但有时它不添加月如果天 我使用这个代码进行测试 (2017, 10, 16)和(2018, 1, 15)应该显示为3个月,但它们显示为2个
问题内容: 我正在计算用于报告的租赁设备的收入。因此,与正常工作日相比,周末工作日的雇用成本将增加10%。因此,我该如何计算两个日期之间有多少个周末。在报表查询中,我也不能使用DECLARE。有人可以帮我做到这一点。太感谢了 问题答案: 这应该工作: http://sqlfiddle.com/#!3/d41d8/5707/0