【问题标题】:How to calculate the date difference in years and months in SQL Server?SQL Server中如何计算年月日差?
【发布时间】:2020-12-07 17:29:50
【问题描述】:

我正在尝试在 SQL Server 中计算频率估计值,并且我正在使用以下查询来获取结果,

FORMAT(DATEADD(month,-66, DATEADD(dd, 0,DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0))), 'd','us') --For -5.5 years Frequency

FORMAT(DATEADD(month,-6, DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, DATA_ASOF_TSTMP), 0))), 'd','us') --For -6 Months Frequency

我得到了以下结果

5.5_Years_Frequency    6_Months_Frequency
          4/1/2015             3/30/2020

对于 -6 个月的频率,我得到的结束日期为 2020 年 3 月 30 日,但 3 月有 31 天,因此,我希望结果为 2020 年 3 月 31 日而不是 2020 年 3 月 30 日,如下所示。

预期结果,

5.5_Years_Frequency    6_Months_Frequency
          4/1/2015              3/31/2020

谁能帮我得到预期的结果?

【问题讨论】:

  • 您的问题不清楚。你能用文字描述尝试的计算吗? “6 个月频率”是否等于“获取当前季度前 3 个季度的季度结束日期”?
  • 是的,你是对的。但是,当我从当前季度计算 -6 个月时,我得到的结束日期为 2020 年 3 月 30 日,但 3 月有 31 天,我应该得到 2020 年 3 月 31 日而不是 2020 年 3 月 30 日。
  • 添加了 6 个月频率的答案,但您当前和预期的“5.5 年频率”结果在您的问题中是否相同?而 4 月 1 日是季度 开始日期,因此它与 6 个月频率的定义不匹配(它给出了 结束日期)。
  • 是的,但是对于 5.5 年的频率,我不想要季度结束日期,它应该是下一个季度的开始日期,这就是业务要求我们创建逻辑的方式。跨度>
  • 好的,那么你可以从计算中删除dateadd(dd, 0, ;-)

标签: tsql sql-server-2017


【解决方案1】:

更改计算顺序:

  1. 确定季度
  2. 减去 6 个月
  3. 减去 1 天

6 个月频率:

select FORMAT(DATEADD(dd, -1, DATEADD(month,-6, DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0))), 'd','us');

Fiddle

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多