SQL 中基于出生日期的准确年龄计算要求生日列具有有效的 datetime
或 date
数据类型。 如果您的出生日期列当前为 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中文网其他相关文章!