使用DATEDIFF()函数计算年龄有问题

xmvb 2006-07-05 10:50:50
使用DATEDIFF(yy, Birthday, GETDATE()) 计算年龄,例如今天是2006-7-5,张三的Birthday是1976-1-1,那张三应该是31岁,但DATEDIFF(yy, Birthday, GETDATE()) 出来的结果是30,显然只是用年份相减,所以不正确。
不知是否有一函数是用真实日期相减?
...全文
1433 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmvb 2006-07-05
  • 打赏
  • 举报
回复
谢谢各位
PeterWong 2006-07-05
  • 打赏
  • 举报
回复
declare @dtBirthDate datetime
declare @dtThisDate datetime
set @dtBirthDate = '1980-7-1'
set @dtThisDate = getdate()
declare @nYear int

select @nYear = datediff(yy, @dtBirthDate, @dtThisDate)
select age = case when datediff(dd, dateadd(yy, @nYear, @dtBirthDate), @dtThisDate) < 0 then @nYear - 1 else @nYear end
云中客 2006-07-05
  • 打赏
  • 举报
回复
呵呵,你的年龄是周岁吗
如果一定要和你的要求相同:
datediff(yy,birthday,getdate())+1
昵称被占用了 2006-07-05
  • 打赏
  • 举报
回复
declare @Birthday datetime
set @Birthday='1976-4-6'
select case when dateadd(yy,DATEDIFF(yy, @Birthday, GETDATE()),@Birthday)>getdate()
then DATEDIFF(yy, @Birthday, GETDATE())
else DATEDIFF(yy, @Birthday, GETDATE())+1
end

set @Birthday='1976-7-6'
select case when dateadd(yy,DATEDIFF(yy, @Birthday, GETDATE()),@Birthday)>getdate()
then DATEDIFF(yy, @Birthday, GETDATE())
else DATEDIFF(yy, @Birthday, GETDATE())+1
end
LouisXIV 2006-07-05
  • 打赏
  • 举报
回复
实足年龄确实是30:)

事实上,不能直接用Datediff(year...)来取得年龄,必须有更明确的对应关系(是否过了生日的判断)
playwarcraft 2006-07-05
  • 打赏
  • 举报
回复
datediff(yy,birthday,getdate())+1 不就可以了?

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧