首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据出生日期和getDate()计算年龄(以年为单位)

如何根据出生日期和getDate()计算年龄(以年为单位)
EN

Stack Overflow用户
提问于 2009-10-15 20:40:08
回答 30查看 780.2K关注 0票数 197

我有一个表,列出了人们及其出生日期(目前是nvarchar(25))

如何将其转换为日期,然后以年为单位计算它们的年龄?

我的数据如下所示

代码语言:javascript
复制
ID    Name   DOB
1     John   1992-01-09 00:00:00
2     Sally  1959-05-20 00:00:00

我希望看到:

代码语言:javascript
复制
ID    Name   AGE  DOB
1     John   17   1992-01-09 00:00:00
2     Sally  50   1959-05-20 00:00:00
EN

回答 30

Stack Overflow用户

发布于 2009-10-15 14:58:12

一定要把这个扔出去。如果您使用112样式(yyyymmdd)将日期convert为一个数字,则可以使用如下计算方式...

(yyyyMMdd - yyyyMMdd) / 10000 =全年差值

代码语言:javascript
复制
declare @as_of datetime, @bday datetime;
select @as_of = '2009/10/15', @bday = '1980/4/20'

select 
    Convert(Char(8),@as_of,112),
    Convert(Char(8),@bday,112),
    0 + Convert(Char(8),@as_of,112) - Convert(Char(8),@bday,112), 
    (0 + Convert(Char(8),@as_of,112) - Convert(Char(8),@bday,112)) / 10000

输出

代码语言:javascript
复制
20091015    19800420    290595  29
票数 164
EN

Stack Overflow用户

发布于 2009-10-15 13:07:50

我在我们的生产代码中使用这个查询已经将近10年了:

代码语言:javascript
复制
SELECT FLOOR((CAST (GetDate() AS INTEGER) - CAST(Date_of_birth AS INTEGER)) / 365.25) AS Age
票数 50
EN

Stack Overflow用户

发布于 2009-10-15 13:03:05

您需要考虑datediff命令的循环方式。

代码语言:javascript
复制
SELECT CASE WHEN dateadd(year, datediff (year, DOB, getdate()), DOB) > getdate()
            THEN datediff(year, DOB, getdate()) - 1
            ELSE datediff(year, DOB, getdate())
       END as Age
FROM <table>

我是从here改编的。

请注意,对于非闰年,它将把2月28日视为小学生的生日,例如,2020年2月29日出生的人将在2021年2月28日被视为1岁,而不是2021年3月1日。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1572110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档