sql server 怎么计算年龄

时间:2021-02-09 00:35:45
person表,出生日期字段的数据类型是datetime,用sql语句怎么计算现在的年龄?谢谢!

6 个解决方案

#1


year(getdate())-year(datetime)

#2



select datediff(year,出生日期,getdate()) as '年龄' from person

#3


SELECT DATEDIFF(YEAR,出生日期,GETDATE()) FROM person
与实际对照一下再调整就可以了 

#4


--只算年龄用
select datediff(year,出生日期,getdate()) as '年龄' from person

如果没到生日是不是少算一岁?

#5


FLOOR(datediff(DY,birthday,getdate())/365.25)
我是这样计算年龄的,这样算出来比较合理。

#6


给个函数,计算年龄可以精确到天的,用法自己观察哈:

----------------------------------------------------------------------
--计算年龄的函数
--算法原则:超过生日,年龄就得加1
--
--SELECT dbo.FUN_GetAge('1988-7-29', getdate()) as age
----------------------------------------------------------------------
CREATE    function [dbo].[FUN_GetAge]
(
   @birthday datetime,  --出生日期
   @today datetime      --截至日期
)
returns int
as
begin
if @birthday > @today
begin
return 0;
end

declare @age int

select @age = datediff(year, @birthday, @today)--年份差值

if datepart(month, @today) > datepart(month, @birthday)--月份超过
begin
select  @age = @age + 1
end

if datepart(month, @today) = datepart(month, @birthday)--月份一样
begin
if datepart(day, @today) >= datepart(day, @birthday)--日超过
begin
select  @age = @age + 1
end
end

return @age ;
End

#1


year(getdate())-year(datetime)

#2



select datediff(year,出生日期,getdate()) as '年龄' from person

#3


SELECT DATEDIFF(YEAR,出生日期,GETDATE()) FROM person
与实际对照一下再调整就可以了 

#4


--只算年龄用
select datediff(year,出生日期,getdate()) as '年龄' from person

如果没到生日是不是少算一岁?

#5


FLOOR(datediff(DY,birthday,getdate())/365.25)
我是这样计算年龄的,这样算出来比较合理。

#6


给个函数,计算年龄可以精确到天的,用法自己观察哈:

----------------------------------------------------------------------
--计算年龄的函数
--算法原则:超过生日,年龄就得加1
--
--SELECT dbo.FUN_GetAge('1988-7-29', getdate()) as age
----------------------------------------------------------------------
CREATE    function [dbo].[FUN_GetAge]
(
   @birthday datetime,  --出生日期
   @today datetime      --截至日期
)
returns int
as
begin
if @birthday > @today
begin
return 0;
end

declare @age int

select @age = datediff(year, @birthday, @today)--年份差值

if datepart(month, @today) > datepart(month, @birthday)--月份超过
begin
select  @age = @age + 1
end

if datepart(month, @today) = datepart(month, @birthday)--月份一样
begin
if datepart(day, @today) >= datepart(day, @birthday)--日超过
begin
select  @age = @age + 1
end
end

return @age ;
End