我对SQL不熟悉。这可能是格式问题?
我有一个获取正确值的问题。 所以我有2个datetime,StartDate和EndDate。
例如
预期结果
正确答案应该是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 ..
答案 0 :(得分:1)
您的代码有效。您可以运行以下DB Fiddle或以下代码:
DECLARE @StartDate datetime = '2017-12-14 15:13:00.000';
DECLARE @EndDate datetime = '2017-12-21 00:00:00.000'
DECLARE @temp DECIMAL(10,2) = CAST(DATEDIFF(second, @StartDate, @ENDDate) as Decimal(10,2))/86400.0
DECLARE @temp2 DECIMAL(10,2) = DATEDIFF(second, @StartDate, @ENDDate)/86400.0
select @temp, @temp2;
那么,什么简单的错误会使您获得所看到的结果?有一个:如果您将“日期”变量定义为date
而不是datetime
。
我怀疑您有
DECLARE @StartDate date = '2017-12-14 15:13:00.000';
DECLARE @EndDate date = '2017-12-21 00:00:00.000'
答案 1 :(得分:1)
工作正常
DECLARE @t AS DECIMAL(10,2);
set @t= datediff(second,'2017-12-14 15:13:00.000','2017-12-21 00:00:00.000')/(3600.00*24);
select @t
所以我认为您也可以工作