gpt4 book ai didi

sql - 日期差异(以年为单位)包括年份分数

转载 作者:行者123 更新时间:2023-12-04 14:47:55 34 4
gpt4 key购买 nike

有没有一种简单的方法来计算两个日期之间的差异:

  • 表示为年数,包括。年份分数;和
  • 考虑闰年?

  • 例如,2011 年 3 月 1 日和 2012 年 3 月 1 日之间的差值是 1 年。但是,如果我使用 DATEDIFF(day,..,..) 并除以 365,由于闰年,我得到的(不希望的)答案为 1.00274。

    需要明确的是,我还需要任何年份的分数(即,不仅仅是年份的整数)。例如,2011 年 3 月 1 日和 2012 年 3 月 3 日之间的差值是 1.005479(1 年 + 2/365 年)。 2011 年 3 月 1 日和 2012 年 2 月 29 日之间的差异是 0.997268(0 年 + 365/366 年)

    因此,总而言之,上述两个示例的输出(在 DECIMAL(7,6) 中)将是:

    1.000000
    1.005479
    0.997268

    最佳答案

    这是一个查询。但是在您的示例中存在逻辑错误。我认为“2011年3月1日和2012年3月3日之间的差异是1.005479(1年+2/365年)”应该是(1年+2/366年),因为2011年3月3日和2012年3月3日之间的29.02.2012过去一年 366 天。

        Declare @BDate datetime
    Declare @EDate datetime
    SET @BDate='2011-03-01'
    SET @EDate='2012-02-29'

    select

    datediff(year,@BDate,@Edate)-
    case when dateadd(year,datediff(year,@BDate,@Edate),@BDate)>@Edate then 1 else 0 end
    +cast(datediff(day,dateadd(year,datediff(year,@BDate,@Edate)-
    case when dateadd(year,datediff(year,@BDate,@Edate),@BDate)>@Edate then 1 else 0 end ,@BDate),@Edate) as float)/
    cast(datediff(day,dateadd(year,-1,@Edate),@Edate) as float)

    关于sql - 日期差异(以年为单位)包括年份分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11878367/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com