Sql 将时间(0)数据类型除以INT数据类型,并在单独的列中生成总和
我有一个表TimeLog和列StartTime、FinishTime、Units和ElapsedTime。我想用ElapsedTime除以单位生成一个UPH列。这就是我到目前为止所拥有的Sql 将时间(0)数据类型除以INT数据类型,并在单独的列中生成总和,sql,sql-server,Sql,Sql Server,我有一个表TimeLog和列StartTime、FinishTime、Units和ElapsedTime。我想用ElapsedTime除以单位生成一个UPH列。这就是我到目前为止所拥有的 SELECT StartTime, FinishTime, ElapsedTime = convert(time(0),dateadd(second,datediff(second,StartTime,FinishTime),0)), Units FROM TimeLog StartTim
SELECT StartTime,
FinishTime,
ElapsedTime = convert(time(0),dateadd(second,datediff(second,StartTime,FinishTime),0)),
Units
FROM TimeLog
StartTime FinishTime ElapsedTime Units
08:00:00 08:25:00 00:25:00 0
08:25:00 09:15:00 00:50:00 0
09:55:00 12:32:00 02:37:00 55
12:32:00 14:31:00 01:59:00 23
12:32:00 13:55:00 01:23:00 55
希望看到的结果是
StartTime FinishTime ElapsedTime Units UPH
08:00:00 08:25:00 0:25:00 0 (ElapsedTime/Units)
08:25:00 09:15:00 0:50:00 0 (ElapsedTime/Units)
09:55:00 12:32:00 2:37:00 55 (ElapsedTime/Units)
12:32:00 14:31:00 1:59:00 23 (ElapsedTime/Units)
12:32:00 13:55:00 1:23:00 55 (ElapsedTime/Units)
使用NULLIF将0单位更改为NULL。 除以NULL将得到NULL,因此它避免了遇到的除以零错误 乘以浮点值1.0,将从datediff得到的INT值更改为浮点值 并使用ISNULL将NULL值更改为0 然后将其全部转换为十进制,这将隐式地对其进行四舍五入 -使用表变量进行测试 声明@TimeLog table StartTime、FinishTime时间,单位为整数; 插入@TimeLog StartTime、FinishTime、Units值 '08:00:00','09:00:00',60, '08:00:00','10:00:00',60, '08:00:00','08:25:00',0, '08:25:00','09:15:00',0, '09:55:00','12:32:00',55, '12:32:00','14:31:00',23, '12:32:00','13:55:00',55; 选择 开始时间,结束时间, ElapsedTime=converttime、dateaddsecond、datediffsecond、StartTime、FinishTime、0、, 单位,, AverageUnitsPerMinute=castisnullUnits/nullifdatediffminute,StartTime,FinishTime*1.0,0,0.0为小数点10,4, AverageHoursPerUnit=castisnulldatediffsecond、StartTime、FinishTime/nullifUnits,0,0/3600.0为小数点10,4, AverageMinutesPerUnit=CastisNullDateDiff毫秒,开始时间,完成时间/nullifUnits,0,0/60000.0为小数点10,2 来自@TimeLog; 对于平均小时数:
将秒数除以3600.0 60分*60秒,得到小时数 使用NULLIF将0单位更改为NULL。 除以NULL将得到NULL,因此它避免了遇到的除以零错误 乘以浮点值1.0,将从datediff得到的INT值更改为浮点值 并使用ISNULL将NULL值更改为0 然后将其全部转换为十进制,这将隐式地对其进行四舍五入 -使用表变量进行测试 声明@TimeLog table StartTime、FinishTime时间,单位为整数; 插入@TimeLog StartTime、FinishTime、Units值 '08:00:00','09:00:00',60, '08:00:00','10:00:00',60, '08:00:00','08:25:00',0, '08:25:00','09:15:00',0, '09:55:00','12:32:00',55, '12:32:00','14:31:00',23, '12:32:00','13:55:00',55; 选择 开始时间,结束时间, ElapsedTime=converttime、dateaddsecond、datediffsecond、StartTime、FinishTime、0、, 单位,, AverageUnitsPerMinute=castisnullUnits/nullifdatediffminute,StartTime,FinishTime*1.0,0,0.0为小数点10,4, AverageHoursPerUnit=castisnulldatediffsecond、StartTime、FinishTime/nullifUnits,0,0/3600.0为小数点10,4, AverageMinutesPerUnit=CastisNullDateDiff毫秒,开始时间,完成时间/nullifUnits,0,0/60000.0为小数点10,2 来自@TimeLog; 对于平均小时数:
将秒数除以3600.0 60分*60秒,得到小时数 可能的副本需要指定预览。例如,看第四排。。。差不多是每小时12英镑。。。或者可能实际上是每小时12英里。如果您想要精确到这一点,我们可能需要确定每分钟的单位,并将其聚合起来。这会让你每小时12.33个单位,而不是每小时12个单位。无论如何,通过显示您期望的输出来指定精度:@scsimon嘿,我是stackoverflow的新手。我对我的问题进行了编辑,以反映我正在尽我所能实现的目标:您可能需要指定预测的副本。例如,看第四排。。。差不多是每小时12英镑。。。或者可能实际上是每小时12英里。如果您想要精确到这一点,我们可能需要确定每分钟的单位,并将其聚合起来。这会让你每小时12.33个单位,而不是每小时12个单位。无论如何,通过显示您期望的输出来指定精度:@scsimon嘿,我是stackoverflow的新手。我对我的问题进行了编辑,以反映我正在尽我所能实现的目标:嘿,谢谢,看起来不错。问题,这是每分钟产生的总和,对吗?我们如何将每小时的单位数表示为UPHI thin?你应该将分子转换为十进制,而不是最终分数。例如,选择CAST10/60作为小数10,2应返回0,但选择CAST10作为小数10,2/60返回0。166666@TriV您好,您能根据我的表和列名在完整查询中显示您的示例吗?@DruidUID Ah,因此UPH是每小时。更新了。@TriV这就是为什么我除以浮点数3600.0嘿,谢谢,看起来不错。问题,这是每分钟产生的总和,对吗?我们如何将每小时的单位数表示为UPHI thin?你应该将分子转换为十进制,而不是最终分数。例如,选择CAST10/60作为小数10,2应返回0,但选择CAST10作为小数10,2/60返回0。166666@TriV您好,您能根据我的表和列名在完整查询中显示您的示例吗?@DruidUID Ah,因此UPH是每小时。更新了。@TriV这就是为什么我除以浮点3600.0