You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中计算两个日期的年份差值?

在MySQL中精确计算两个日期的年份差值

DATEDIFF函数确实仅返回两个日期的天数差,若要精确计算考虑月份和天数的年份差值,可以用以下几种方法:

1. 使用TIMESTAMPDIFF函数(推荐)

这是MySQL专门用于计算时间差的函数,可以指定计算单位为YEAR,会自动判断结束日期是否满足相对于起始日期满一年的条件。

语法:TIMESTAMPDIFF(单位, 起始日期, 结束日期)
注意参数顺序:起始日期在前,结束日期在后。

示例:

-- 计算2017-06-15到2018-06-25的年份差
SELECT TIMESTAMPDIFF(YEAR, '2017-06-15', '2018-06-25') AS years_diff;
-- 返回结果:1(因为2018-06-25已超过2017-06-15满一年)

-- 如果结束日期是2018-06-14
SELECT TIMESTAMPDIFF(YEAR, '2017-06-15', '2018-06-14') AS years_diff;
-- 返回结果:0(未到满一年的日期)

2. 近似小数年份(适合非严格整数场景)

如果需要得到包含小数的近似年份差(比如1.03年),可以用天数差除以平均年数(考虑闰年用365.25):

SELECT DATEDIFF('2018-06-25', '2017-06-15') / 365.25 AS approximate_years;
-- 返回结果约为1.0267

注意:这种方法是近似值,不适合需要精确整数年份的场景。

3. 手动计算年份差(兼容旧版本MySQL)

如果你的MySQL版本不支持TIMESTAMPDIFF(极少情况),可以通过年份相减结合月日判断来实现:

SELECT 
    YEAR('2018-06-25') - YEAR('2017-06-15') - 
    CASE 
        WHEN DATE_FORMAT('2018-06-25', '%m%d') < DATE_FORMAT('2017-06-15', '%m%d') 
        THEN 1 
        ELSE 0 
    END AS years_diff;

逻辑:先计算年份的直接差值,若结束日期的月日组合(如0625)小于起始日期的月日组合(0615),则减1,确保结果精确。


内容的提问来源于stack exchange,提问作者user22192978

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:33:13