我正在考虑计算两列之间的日期差异,并以小时,分钟显示第三列中的输出。
Submitted Approved TimeTaken
2016-04-15 10:00:00 2016-04-15 10:13:00 0.13
2016-04-15 10:00:00 2016-04-15 11:38:00 1.38
我已经拥有了日期的所有表格和数据。我只是想知道上面的例子是否是可能的输出。
作为对此的延伸,是否可以仅在上午8点至下午6点之间计算TimeTaken
的小时数?
感谢任何帮助。感谢
答案 0 :(得分:1)
不要将差异存储为小时和分钟。只需使用小数小时:
select datediff(second, submitted, approved) / (60.0 * 60) as decimal_hours
扩展程序更加棘手:
select (case when cast(submitted as date) = cast(approved as date)
then datediff(second, submitted, approved)
else (datediff(day, submitted, approved) - 1) * 10*60*60 +
datediff(second, cast(submitted as time), '20:00') +
datediff(second, '08:00', cast(approved as time))
end) / (60.0 * 60) as decimal_hours
如果您有更多扩展 - 例如避免周末和假期 - 那么请问另一个问题。不要编辑这个。
答案 1 :(得分:0)
对于短期和低精度,您可以使用datediff,但请记住,它不会返回经过的时间,但会越过边界。
Theese的例子让你知道我的意思:
SELECT DATEDIFF(YY, '31/12/2016', '01/01/2017') FakeYears
FakeYears
1
SELECT DATEDIFF(HOUR, '01/01/2017 00:59:59', '01/01/2017 01:00:00') FakeHours
FakeHours
1
请参阅HERE以获取扩展说明和解决方案
答案 2 :(得分:0)
请尝试以下:
SELECT Submitted,
Approved,
REPLACE(LEFT(CAST(Approved - Submitted AS TIME(2)), 5), ':', '.') TimeTaken;
<强>结果:强>
Submitted Approved TimeTaken
2016-04-15 10:00:00.000 2016-04-15 10:13:00.000 00.13
2016-04-15 10:00:00.000 2016-04-15 11:38:00.000 01.38
现在,您可以根据需要在上面进行转换。