SQL Server中计算人员周岁的方法
SQL Server数据库中存储了人员的出生年月日,如何计算周岁呢?
最初想到的就是利用SQL Server中提供的函数DateDiff(),这个函数用来计算两个日期之间的年、月、日的差值,似乎可以这样计算: select DateDiff(yy, birthday, getdate()) 但经过测试后发现,计算出来满周岁的日期要大一天,比如一个1975年10月12日出生的人,计算结果是10月11日即满30周岁;在闰年的时候,还会大两天。经过分析,我认为是由于DateDiff函数是按天计算年度差导致了这个问题。 有没有其他的办法?如果用year()/month()/day()函数分别取年月日比较,那太麻烦了。后来想到,如果把年月日格式化为 yyyymmdd 这样的一个整数,就可以通过算术的方法计算出周岁,因此得到这个方法: select (cast(convert(char( 8 ),@today,112) as int) - cast(convert(char( 8 ),@birthday,112) as int))/10000 为了便于使用,将这个公式放在一个函数中: CREATE FUNCTION GetAge (@birthday datetime, @today datetime) RETURNS int AS BEGIN declare @bd int select @bd =(cast(convert(char( 8 ),@today,112) as int) - cast(convert(char( 8 ),@birthday,112) as int))/10000 return @bd END 然后象这样调用(在SQL Server的NorthWind数据库中测试通过): select orderdate, dbo.getage( orderdate , getdate()) from orders
|