【问题标题】:Display decimal points for DateDiff function in SQL在 SQL 中显示 DateDiff 函数的小数点
【发布时间】: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


【解决方案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'

【讨论】:

    【解决方案2】:

    效果很好

    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

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多