我有一个表作为测试差是给不正确的结果
shiftend | out |
---------------------------------------------
15:00:00.0000000 | 2016-07-22 14:42:00 |
16:00:00.0000000 | 2016-07-22 16:06:00 |
Shiftend是有一个数据类型为时间 出来是有一个数据类型为SMALLDATETIME
我期待输出作为
shiftend | out | Output
-----------------------------------------------------------------------------
15:00:00.0000000 | 2016-07-22 14:42:00 | -00:18:00
16:00:00.0000000 | 2016-07-22 16:06:00 | 00:06:00
我想这个查询:
select shiftend,out,CAST((out-Shiftend) as time(0)) as Output from test
where
CAST(CONVERT(NVARCHAR(10), out, 101) AS SMALLDATETIME) = CAST(CONVERT(NVARCHAR(10),'2016-07-22', 101) AS SMALLDATETIME)
但我得到的输出作为
shiftend | out | Output
-----------------------------------------------------------------------------
15:00:00.0000000 | 2016-07-22 14:42:00 | 23:42:00
16:00:00.0000000 | 2016-07-22 16:06:00 | 00:06:00
23点42分00秒不正确。如何计算时间。
不幸的是,你不能在'time'数据类型负值。它正在将-18变成(00:00 - 00:18),即前一天的23:42。您可以: - 使用'datediff'并将差值保存为秒数,例如。 - 只保存模块化差异,并有一个单独的列来决定它是正面还是负面的差异。 - 编写自己的SQL函数来计算 – Ash
如果它没有给我负面的信息,我们只能得到00:18,那就会好的 –