标题: SQL Server中计算人员周岁的方法 (查看:2183 回复:1)
安普路斯娅
入门网管




UID 413251
精华 0
积分 50
帖子 30
MST币 766 点    
BST币 50 点    赚取
阅读权限 70
注册 2006-7-20
状态 离线
 
[ 使用道具 ]  
发表于 2006-8-9 10:19  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
爱琴思邮件系统iGENUS V5.0
SQL Server中计算人员周岁的方法
本帖发表在我是网管论坛,帖子地址:http://bbs.54master.com/87450,1,1
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

[ 点这里复制网址,推荐给你QQ/MSN上的好友们! ]
本站声明:以上内容由网友 安普路斯娅 提供,与54master立场无关!
[ 顶部 ]
DVD
中级网管

数据库技术


光荣退伍  
UID 183991
精华 5
积分 569
帖子 3133
MST币 10686 点    
BST币 569 点    赚取
阅读权限 100
注册 2005-4-11
来自 IT鸟语学院
状态 离线
 
[ 使用道具 ]  
发表于 2006-8-9 16:22  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友
不错
值得参考

本站声明:以上内容由网友 DVD 提供,与54master立场无关!
《我是网管》论坛
No incapable except unthinkable
my blog : DVD的博客
  MSN:weiguohao008@hotmail.com



--
[ 顶部 ]
  
 



当前时区 GMT+8, 现在时间是 2008-9-5 15:48

Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 1.500456 second(s), 12 queries , Gzip enabled

清除 Cookies - 关于我是网管 - 联系我是网管 - 广告服务 - 诚聘版主 - 无图版 - WAP -