如何根据SQL中的出生日期计算年龄(以年为单位)

时间:2014-11-03 14:32:16

标签: sql

我希望在该人年满70岁之后获得该月的第一天。如何在SQL中实现这一点

我正在使用公式计算年龄

DECLARE @Date_of_birth DATETIME = '1915-10-02 00:00:00.000'
DECLARE @AGE INT
SELECT @AGE =  FLOOR((CAST (GETDATE() AS INTEGER) - CAST(@Date_of_birth AS INTEGER)) / 365.25) 

IF(@AGE > 70)

   How to find the first of the month following the date ??
IF (@AGE >80)

5 个答案:

答案 0 :(得分:1)

declare @dob datetime = '1954-06-08'
declare @age int = 70

select DATEADD(m, DATEDIFF(m, -1, DATEADD(yy, @age, @dob)), 0)

答案 1 :(得分:0)

你可以像这样使用dateadd函数

select dateadd(d,1 - datepart(d,dateadd(m,1,dateadd(yy,70",,@Date_of_birth)),dateadd(m,1,dateadd(yy,70",,@Date_of_birth)))

您可以像这样分解此查询

declare @BD_70 date = dateadd(yy,70",,@Date_of_birth)
declare @Nxt_Month_70 = dateadd(m,1,@BD_70 date)
declare @First_Of_Month_70 = dateadd(d,1 - datepart(d,@Nxt_Month_70),@Nxt_Month_70)

基本上,你添加70年,下个月找到并将当天替换为本月的第一天。

答案 2 :(得分:0)

您可以使用datediff计算他们的年龄,然后添加日期以查找他们的70岁生日。要查找之后的第一个月,您可以使用月份和年份功能。

create table #people (name varchar(30), birthdate date)

insert into #people
values ('Bob', '07/08/1976'), ('Tasha','05/30/1996'),('April','04/01/1971')

--This will give you everyone's age
select DATEDIFF(YY,birthdate,GETDATE()) as age
from #people

--This will give you the first month following the date that they turn 70
select Name, DATEADD(yy,70,birthdate) as [70thBday], convert(varchar,month(dateadd(m,1,DATEADD(yy,70,birthdate)))) + '/01/' + convert(varchar,YEAR(dateadd(m,1,DATEADD(yy,70,birthdate))))
from #people

答案 3 :(得分:0)

以下是根据当前日期计算年龄的方法。

select case 
            when cast(getdate() as date) = cast(dateadd(year, (datediff(year, '1996-09-09', getdate())), '1996-09-09') as date)
                then dateDiff(yyyy,'1996-09-09',dateadd(year, 0, getdate()))
            else dateDiff(yyyy,'1996-09-09',dateadd(year, -1, getdate()))
        end as MemberAge
go

答案 4 :(得分:0)

这是我计算年龄的方法:

SELECT DATEDIFF(yy,[DateOfBirth],GETDATE())+(当DATEPART(MONTH,GETDATE())-DATEPART(MONTH,[DateOfBirth])<0 THEN -1 ELSE 0 END)时的年龄用户]