【发布时间】:2018-10-12 13:22:00
【问题描述】:
我不熟悉 SQL。这可能是格式问题?
我无法获得正确的值。 所以我有 2 个日期时间,StartDate 和 EndDate。
例如
- 开始日期 2017-12-14 15:13:00.000
- 结束日期 2017-12-21 00:00:00.000
预期结果
正确答案应该是 9.36,但它一直给我 10。 所以我在尝试不同的方法。
当前首先获取天数(使用 datediff 为 9 天),然后获取十进制值 (0.36) --> 以天为单位的小时数
这样我就可以有 9+0.36 = 9.36
从我读过的所有帖子中,我尝试了以下方法
DECLARE @temp AS DECIMAL(10,2) = CAST(DATEDIFF(second, CONVERT(time, @StartDate), CONVERT(time, @ENDDate)) as Decimal(10,2))/86400.0
DECLARE @temp AS DECIMAL(10,2) = DATEDIFF(second, CONVERT(time,@StartDate), CONVERT(time,@EndDate))/3600.0
DECLARE @temp AS Decimal(10,2) = CAST(@StartDate - @EndDate) as Float) * 24.0
DECLARE @temp AS decimal(10,4) = DATEDIFF(ss, @StartDate, @ENDDATE)/3600.0
@temp = CAST(DATEDIFF(minute, CONVERT(time, @StartDate), CONVERT(time, @ENDDate)) as Decimal(18,2))/60
了解划分可能不正确。但重要的是至少得到一个值不是 10.00 的小数。
SQL 中的列也是 (decimal(12,2)。只是想知道无论我如何尝试除法,该列都会一直返回 10.00 而不是 9.36。
我提到的一些帖子:
get datediff hours in decimal sql server
TSQL DateDiff to return number of days with 2 decimal places
DATEDIFF() to just return age with 2 decimal points
似乎是一个非常常见的问题,但我就是无法让它工作。
谁能帮忙看看?谢谢!
更新:原来我忘了输入 RETURN DECIMAL(10,2)。我只输入了 RETURN DECIMAL..
【问题讨论】:
-
我认为您的所有(或大部分)表达式都应该按照您的意愿行事。你如何显示结果?这是一个 dbfiddle 表明这些确实有效:dbfiddle.uk/…。此外,答案应该是 6.37,而不是 9+。
-
您好,感谢您的帮助。实际上,我也需要排除周末和 PH。我忘了在上面提到它。但是很高兴知道这行代码可以正常工作。只是觉得奇怪的是它没有显示,即使日期确实是日期时间。
-
。 .这是一个非常不同的问题。您应该将其作为一个新问题提出。
标签: sql sql-server