我已经在这个问题上磕磕绊绊几天了,似乎无法弄清楚为什么,当我的getdate()插入列中时,为军事时间格式提供毫秒十进制,我似乎仍然无法能够拉小数格式datediff()结果。是否由于周围的''字符导致引擎无法识别小数?
当我使用时:
select datediff(s,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997')
它返回:
7200
当我使用时:
select cast(datediff(s,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997') as float);
它返回:
7200
我不知道为了得到十进制值而遗漏了什么。
由于
答案 0 :(得分:3)
如果您想要获得差异的毫秒数,并且想要将单位转换为秒,则可以尝试使用以下内容:
SELECT DATEDIFF(MS,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997') / 1000.0
那将产生:7200.856000
。
答案 1 :(得分:1)
请注意,DATEDIFF(MS,...)需要长时间保护,否则会溢出:
SELECT datediff(MS, '2013-06-30 23:59:59.997', '2013-06-01 21:59:59.141')
-- FAILURE: The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large
您可以使用以下方法,该方法是溢出安全的,并为您提供浮动结果:
SELECT cast(cast('2013-06-01 23:59:59.997' as datetime)-cast('2013-06-01 21:59:59.141' as datetime) as float) * 24.0
-- Returned 2.00023796296296
SELECT cast(cast('2013-06-30 23:59:59.997' as datetime)-cast('2013-06-01 21:59:59.141' as datetime) as float) * 24.0
-- Returned 698.000237962963
我不确定在测量日期期间时区发生变化时此方法的工作原理。