注册 登录
编程论坛 SQL Server论坛

应该是很简单的一个题 想了半天没想出来 谁帮忙解决一下

张汉卿 发布于 2010-04-11 17:57, 1192 次点击
在学生信息表中 根据出生日期  检索每个学生的年龄
11 回复
#2
cnfarer2010-04-11 20:21
通过计算得到:当前日期年份-出生日期年份
也有人这样做,当前日期与出生日期之间的差值(时间)-->年数

当然,还可以有更精确的方法,不过可能复杂一些
#3
zhangfj20082010-04-11 23:04
就以今年的日期给你个例子吧!

select sname, 2010-birth  as sage
from student
没有测试过,大概就是这样。你可以试试!
#4
czyzhuo2010-04-12 08:49
回复 2楼 cnfarer
请问还有哪些更精确的方法呢?可以说一下思想吗?
#5
cnfarer2010-04-12 10:07
回复 4楼 czyzhuo
叫板的吧?
周岁的计算是以生日那天为界限的,当前日期如果在生日之前或之后应该结果是不一样的!
#6
张汉卿2010-04-12 17:42
回复 2楼 cnfarer
通过计算求得我试啦,但差不出来  ,说 年龄 无效  不懂什么意思
#7
张汉卿2010-04-12 17:45
说的都太笼统,能说的细一点吗?
#8
czyzhuo2010-04-13 09:18
回复 5楼 cnfarer
请说话客气一些
我个人认为,时间精确到时分秒时,这样相减,已经足够精确了
我真的想不出还有更精确的计算方法
我是真心向你请教的
你竟然这么粗鲁地说话
无言。。。。
#9
happynight2010-04-13 11:11
给个函数给大家吧
基本上是转了别人的 出处已经不记得了
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE  FUNCTION GetDateDiffValue(@begin datetime,@end datetime,@ReturnType int)
RETURNS INT
AS
--@begin:开始日期,@end:结束日期,@ReturnType:返回数据类型(0:year;1:month;2:day)
BEGIN
   DECLARE @ReturnValue INT
   DECLARE @CurrentValue varchar(25)
   SET @CurrentValue=dbo.GetYearMonthDayPro(@begin,@end)
   IF @ReturnType=0
      SET @ReturnValue=SUBSTRING(@CurrentValue,1,CHARINDEX('年',@CurrentValue)-1)  
   ELSE
      IF @ReturnType=1
         SET @ReturnValue=SUBSTRING(@CurrentValue,CHARINDEX('年',@CurrentValue)+1,CHARINDEX('月',@CurrentValue)-CHARINDEX('年',@CurrentValue)-1)
      ELSE      
         SET @ReturnValue=SUBSTRING(@CurrentValue,CHARINDEX('月',@CurrentValue)+1,CHARINDEX('天',@CurrentValue)-CHARINDEX('月',@CurrentValue)-1)
   RETURN @ReturnValue
END


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

--------------------------------------------
SELECT dbo.GetDateDiffValue('1985-10-23','2010-4-13',0) 年,
dbo.GetDateDiffValue('1985-10-23','2010-4-13',1) 月,
dbo.GetDateDiffValue('1985-10-23','2010-4-13',2) 日
结果:
年      月         日
24      5          21
 
这个函数有点小BUG,谁有空修改后发上来共享下
#10
张汉卿2010-04-13 12:30
回复 8楼 czyzhuo
谢谢各位的帮忙!呵呵!

[ 本帖最后由 张汉卿 于 2010-4-13 12:32 编辑 ]
#11
mengzhihen2010-04-21 17:59
select datediff(year,borndate,getdate()) age from  table
#12
2010-04-27 23:18
不懂!
1