【发布时间】:2021-10-09 23:07:56
【问题描述】:
我正在处理一个处理一系列电子文档背后的详细信息的查询。每个文档都有一个CreateDate 和一个CompletedDate,它们都是datetime 格式。我的目标是计算这两个日期之间经过的小时数。
SELECT
DocID,
CreateDate,
CompletedDate,
CONVERT(DECIMAL(10,2),DATEDIFF(HOUR,CreateDate,CompletedDate)) AS DiffHours
FROM Documents
这是一个简单的查询,而且运行良好。但是,我最终得到这样的结果:
DocID CreateDate CompletedDate DiffHours
--------------------------------------------------------------------------
0001 2021-07-01 08:34:28.130 2021-07-01 08:58:14.633 0.00
0002 2021-07-01 10:33:03.157 2021-07-02 08:37:14.120 22.00
从技术上讲,转换为十进制有效,但它仍然只将DiffHours 结果显示为四舍五入的数字。例如,对于 ID 为 0001 的第一个文档,两次之间没有经过整整一个小时,但我仍然希望结果显示为 0.42 左右,而不是四舍五入为 0。同样,我会预计第二个文档将显示为 22.[something] 而不仅仅是平面 22.00。
有没有办法强制计算更精确?同样,从技术上讲,查询按原样工作,但如果我无法显示正确的小时数,那么它就不会像我希望的那样有用。
【问题讨论】:
-
答案没有提到 datediff 计算两个日期之间的边界的事实,例如
2020-01-01 00:59:59和2020-01-01 01:00:00相隔一秒,但 datediff(hour, ...) 表示它们相隔一小时。 -
@SalmanA 啊,有道理
-
@SalmanA 在计算小时差时确实如此,但两个答案都没有;您也可以在午夜的任一侧设置日期时间,以秒分隔,以 days 为单位测量的 datediff 也将导致 1
标签: sql sql-server tsql datetime datediff