Sql server 用于计算sql server 2008 R2中的小时数的函数

Sql server 用于计算sql server 2008 R2中的小时数的函数,sql-server,tsql,sql-server-2008-r2,Sql Server,Tsql,Sql Server 2008 R2,我想在SQL server 2008 R2中创建一个函数,当传递了两个参数@ShiftStart和@ShiftEnd时,该函数将返回非加班小时数。加班时间固定在22:00至06:00之间。我们需要非加班时间,而非加班时间。 少数病例和结果如下所示 Case No ShiftStart ShiftEnd Non-OT Hours 1. '2017-12-28 05:00:00.000' '2017-1

我想在SQL server 2008 R2中创建一个函数,当传递了两个参数@ShiftStart和@ShiftEnd时,该函数将返回非加班小时数。加班时间固定在22:00至06:00之间。我们需要非加班时间,而非加班时间。 少数病例和结果如下所示

Case No          ShiftStart               ShiftEnd                   Non-OT Hours
1.        '2017-12-28 05:00:00.000'  '2017-12-28 08:00:00.000'      2 calculated like this (06:00 - 08:00)
2.        '2017-12-28 20:00:00.000'  '2017-12-28 23:00:00.000'      2 calculated like this (22:00 - 20:00)
3.        '2017-12-28 22:00:00.000'  '2017-12-29 01:00:00.000'      0 as this shift is inside the OT hours
4.        '2017-12-28 20:00:00.000'  '2017-12-29 02:00:00.000'      2 calculated like this (22:00 - 20:00)
请帮助编写函数 fn_GetNonOTHours@ShiftStart,@ShiftEnd


谢谢

创建函数fn\u getnoothours @移位开始日期时间 ,@ShiftEnd-datetime 返回整数 像 开始 -在这里声明返回变量 声明@cnt int

声明@CurrentStart datetime,@CurrentEnd datetime

选择@CurrentStart=DATEADDHOUR,6,DATEADDDAY,DATEDIFFDAY,0,@ShiftStart,0, @CurrentEnd=DATEADDHOUR,-2,DATEADDDAY,DATEDIFFDAY,0,@ShiftStart+1,0

);派生表 选择案例时@ShiftStart@CurrentEnd然后@CurrentEnd else@ShiftEnd作为EndHours结束

从cte中选择@cnt=DATEDIFFHOUR、StartHours和EndHours

返回@cnt

结束

创建表测试用例no int、ShiftStart datetime、ShiftEnd datetime 插入到测试值中 1,'2017-12-28 05:00:00.000','2017-12-28 08:00:00.000' ,2,'2017-12-28 20:00:00.000','2017-12-28 23:00:00.000' ,3,'2017-12-28 22:00:00.000','2017-12-29 01:00:00.000' ,4,'2017-12-28 20:00:00.000','2017-12-29 02:00:00.000'


选择*,dbo.fn_GetNouthours Shift Start,Shift Not Hour from test

请显示您尝试过的内容,以及您面临的任何问题。所以这不是免费的编码服务。你需要展示你迄今为止所取得的成就以及你所处的困境。