Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将时间(0)数据类型除以INT数据类型,并在单独的列中生成总和_Sql_Sql Server - Fatal编程技术网

Sql 将时间(0)数据类型除以INT数据类型,并在单独的列中生成总和

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

我有一个表TimeLog和列StartTime、FinishTime、Units和ElapsedTime。我想用ElapsedTime除以单位生成一个UPH列。这就是我到目前为止所拥有的

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