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

在SQL中显示DateDiff函数的小数点,sql,sql-server,Sql,Sql Server,我不熟悉SQL。这可能是格式问题 我在获取正确的值方面有问题。 所以我有两个日期时间,开始日期和结束日期 例如 开始日期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 从我读过的所有帖子中,我尝试了以下方法 DECLAR

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

我在获取正确的值方面有问题。 所以我有两个日期时间,开始日期和结束日期

例如

  • 开始日期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

我提到的一些帖子:

这似乎是一个很常见的问题,但我就是无法让它发挥作用

谁能帮我看看吗?谢谢


更新:原来我忘了输入返回小数(10,2)。我只输入了返回小数。

您的代码可以运行。您可以运行以下代码:

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'
它很好用

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
所以我认为你的计划也奏效了


我认为全部(或大部分)你的表达式中的任何一个都可以做你想做的。你是如何显示结果的?这里有一个dbfiddle显示这些都可以工作:。而且,答案应该是6.37,而不是9+。嗨,谢谢你的帮助。实际上,我还需要排除周末和PH。我忘了在上面提到它。但是很高兴知道这行代码工作正常。JusI don’我不觉得奇怪,它没有显示,即使日期确实是datetime…这是一个非常不同的问题。你应该把它作为一个新问题来问。