在SQL Server中计算(小时,分钟)的日期差异

时间:2017-10-03 15:41:55

标签: sql sql-server date

我正在考虑计算两列之间的日期差异,并以小时,分钟显示第三列中的输出。

       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的小时数?

感谢任何帮助。感谢

3 个答案:

答案 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

现在,您可以根据需要在上面进行转换。