首页 > 数据库 > mysql教程 > 如何使用 SQL 准确计算从出生日期算起的年龄?

如何使用 SQL 准确计算从出生日期算起的年龄?

Linda Hamilton
发布: 2025-01-22 13:32:41
原创
414 人浏览过

How Can I Accurately Calculate Age in Years from a Date of Birth Using SQL?

使用 SQL 计算从出生日期算起的年龄:精确方法

SQL 中基于出生日期的准确年龄计算要求生日列具有有效的 datetimedate 数据类型。 如果您的出生日期列当前为 nvarchar(25),您必须首先将其转换为合适的日期格式。

假设此转换完成,让我们检查一下有效的年龄计算方法:

方法 1:简化方法(近似)

此方法使用 DATEDIFF 查找当前日期和出生日期之间的小时差,然后除以一年中的大约小时数 (8766.0):

SELECT DATEDIFF(hour, @dob, GETDATE())/8766.0 AS AgeYearsDecimal
登录后复制

这会产生十进制年龄,但由于每月天数和闰年的变化,其准确性受到限制。

改进且更准确的方法:

整数年龄计算:

此方法计算整年年龄:

SELECT (CONVERT(int,CONVERT(char(8),@Now,112))-CONVERT(char(8),@Dob,112))/10000 AS AgeIntYears
登录后复制

精确的十进制年龄计算:

为了获得更精确的十进制年龄,推荐使用这种改进的方法:

SELECT 1.0* DateDiff(yy,@Dob,@Now)
    +CASE
         WHEN @Now >= DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)) THEN
           (
              1.0   
              * DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)),@Now)
              / DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),1,1),DATEFROMPARTS(DATEPART(yyyy,@Now)+1,1,1))
           )
         ELSE 
           -1 
           * (       
                * DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)),@Now) 
                / DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),1,1),DATEFROMPARTS(DATEPART(yyyy,@Now)+1,1,1))
                )
     END AS AgeYearsDecimal
登录后复制

这种先进的方法考虑了闰年,并提供了高度准确的十进制年龄表示。 对于需要精确年龄计算的情况,这是首选方法。

以上是如何使用 SQL 准确计算从出生日期算起的年龄?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板