首页 > 解决方案 > 使用 datediff 获取正确的小时值

问题描述

我正在尝试datediff在 SQL Server 中使用该函数。我正在查询同一个表中的两个日期时间列。我正在尝试获得以小数点为单位的小时和分钟的结果。

作为一个例子,我有这个查询:

Select 
    startdatetime, enddatetime, 
    datediff(minutes, startdatetime, enddatetim) / 60 as 'Hrs worked' 
from table1

结果将类似于:

startdatetime                      |  enddatetime                          |  Hrs. worked
2019-02-28 06:00:00.0000000 -08:00    2019-02-28 07:15:00.0000000 -08:00      1

显然 startdatetime 和 enddatetime 之间的差异应该是 1.25 而不仅仅是 1。

反正有显示十进制值(1.25)吗?

我也试过:

Select 
    StartDateTime, EndDateTime, 
    Convert(decimal(3), (Datediff(minute, StartDateTime, EndDateTime))) / 60 AS 'Hrs Worked' 
From Table1

我确实得到了小时。作为'1.250000'工作,但我无法删除尾随零。

如果我使用decimal(2)而不是decimal(3),我会收到此错误:

将 int 转换为数据类型 numeric 的算术溢出错误

有什么建议么?

标签: sqlsql-servertsqldatediff

解决方案


解决方案结合了 Jack Liu 和 marc_s 的建议。

我还需要定义小数并明确设置 60.0。

这是我正在尝试做的正确格式的示例。

从 Table1 中选择 StartDateTime、EndDateTime、CAST(Datediff(minute, StartDateTime, EndDateTime) / 60.0 AS Decimal(10, 2))'Hrs Worked'


推荐阅读