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

如何基于生日计算年龄?TSQL、Oracle及其他数据库实现

别再用DATEDIFF(YEAR, date_of_birth, GETDATE())算年龄了!这是个常见误区

经常看到有人在SQL Server里用这个语句计算用户当前年龄,但遗憾的是,这并不准确。

问题根源:DATEDIFF的逻辑不是你想的那样

DATEDIFF函数不是统计两个日期之间的完整时间间隔,而是统计两个日期之间跨越的日历边界数量:

  • 当参数是YEAR时,它数的是两个日期之间跨越了多少次1月1日
  • 参数为MONTH时,统计的是跨越每月1日的次数
  • 哪怕是DAY参数,它统计的也是跨越午夜的次数(不过这个场景下差异不大)

举个直观的例子:假设某人出生于2000年12月31日,今天是2024年1月1日。用DATEDIFF(YEAR, '2000-12-31', '2024-01-01')会返回24,但实际上这个人刚过完23岁生日,要到2024年12月31日才满24岁。这就是因为函数只看到跨越了24次1月1日,完全没考虑生日是否在今年已经到来。

正确的周岁计算方法

要准确算出当前的周岁年龄,需要结合年份差和生日是否已过的判断,比如这个写法:

SELECT
    DATEDIFF(YEAR, date_of_birth, GETDATE())
    - CASE
        WHEN DATEADD(YEAR, DATEDIFF(YEAR, date_of_birth, GETDATE()), date_of_birth) > GETDATE()
        THEN 1
        ELSE 0
    END AS current_age

简单来说就是:先算出年份差,再检查今年的生日是否还没到,如果没到就减1,这样得到的就是真实的周岁年龄了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:42:59