在SQL中显示DateDiff函数的小数点

时间:2018-10-11 10:53:02

标签: sql sql-server

我对SQL不熟悉。这可能是格式问题?

我有一个获取正确值的问题。 所以我有2个datetime,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 ..

2 个答案:

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

所以我认为您也可以工作

demo