如何计算SQL中两个日期之间的年,月,日的持续时间/年龄? instituitiondate 和 nextdate 具有“日期”数据类型?

时间:2021-04-17 05:19:09

标签: sql-server date

如何计算SQL中两个日期之间的年、月、日的持续时间/年龄? instituitiondate 和 nextdate 具有“日期”数据类型?

这是我试过的:

SELECT
    instituitiondate, 
    MAX(NextDate) AS LastDate,
    DATEDIFF (YEAR, InstituitionDate, MAX(NextDate)) Years, 
    DATEDIFF (MONTH, InstituitionDate, MAX(NextDate)) Months, 
    DATEDIFF (DAY, InstituitionDate, MAX(NextDate)) Days 
FROM
    Main_Cause_List 
WHERE
    CaseNo = '372/4/2020' 
GROUP BY
    InstituitionDate;

2 个答案:

答案 0 :(得分:0)

我不知道您的问题是否有确切答案,但这应该是一个很好的近似:

SELECT
    instituitiondate, 
    MAX(NextDate) AS LastDate,
    floor(datediff(day, InstituitionDate, MAX(NextDate)) / 365.25) as Years, 
    floor(datediff(day, InstituitionDate, MAX(NextDate)) / 30.4375) % 12 as Months, 
    floor(datediff(day, InstituitionDate, MAX(NextDate)) % 30.4375) as Days 
FROM
    Main_Cause_List 
WHERE
    CaseNo = '372/4/2020' 
GROUP BY
    InstituitionDate;

它计算年龄时考虑了平均每年 365.25 天和每月 30.44 天。

已编辑:将每月天数从 30.44 更改为 30.4375,因为 30.4375 * 12 = 365.25,消除了计算年份与相应月份和剩余天数之间的非常小的不一致。< /p>

答案 1 :(得分:0)

SELECT
    instituitiondate, 
    MAX(NextDate) AS LastDate,
    floor(datediff(day, InstituitionDate, MAX(NextDate)) / 365.25) as Years, 
    floor(datediff(day, InstituitionDate, MAX(NextDate)) / 30.44) % 12 as Months, 
    floor(datediff(day, InstituitionDate, MAX(NextDate)) % 30.44) as Days 
FROM
    Main_Cause_List 
WHERE
    CaseNo = '372/4/2020' 
GROUP BY
    InstituitionDate;