【问题标题】:DateDiff years into decimalsDateDiff 年份转换为小数
【发布时间】:2012-05-02 10:13:25
【问题描述】:

我有两个日期,我想在其中找到它们之间的年数,但是我需要将值显示到小数点后两位。我尝试了以下方法,但总是返回 0,因为我的所有日​​期都不涵盖一整年:

DATEDIFF(yy, @EndDateTime, i.mat_exp_dte)

然后我尝试找出两者之间的天数,然后将其除以 365,但这仍然返回 0:

DATEDIFF(dd, @EndDateTime, i.mat_exp_dte)/365

我现在对如何计算感到困惑。我需要将 DataDiff 转换为不同的数据类型吗?

【问题讨论】:

    标签: sql-server-2008 tsql datediff


    【解决方案1】:

    试试这个。

    DATEDIFF(dd, @EndDateTime, i.mat_exp_dte)/365.0
    

    将 int 与 int 相除返回 int。除以小数,你会得到一个小数的结果。

    【讨论】:

    • 什么是 sql 中删除(! - 不是四舍五入)小数位的命令? (让我们说2)? 1.12345 --->1.12
    • @RoyiNamir - 最后一次尝试 :) select round(1.19999, 2, 1)
    • select CAST (round(1.19999, 2, 1) AS numeric(3, 2))........但是我觉得它太长了......:)
    • 这不会考虑闰年。这是一个小的调整,但仍需要考虑在内。
    【解决方案2】:

    .0 代表浮点数,因此计算包括小数。没有它,你计算整数除法。

    【讨论】:

      【解决方案3】:

      如果您想要一个更准确的版本来说明闰年,那么您可以这样做:

      cast(DATEDIFF(dd, @EndDateTime, i.mat_exp_dte) as float)
      /datediff(dd,@EndDateTime,dateadd(yy,1,@EndDateTime))
      

      【讨论】:

        【解决方案4】:
        SELECT
        (YEAR(@EndDte) - YEAR(@StartDate) + 
        (MONTH(@EndDate) - MONTH(@StartDate) /100.0 + 
        (DAY(@EndDate) - DAY(@StartDate) /10000.0)
        

        如果您需要确定是否正好有一年、少于一年或多于一年。 (=1, 1)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-19
          • 2010-12-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多