日期:2014-05-17 浏览次数:20684 次
ID XM SR
1 小李 1983-12-5
2 小王 1997-12-29
ID XM(姓名) SR(生日) ZHHDRQ(转换后的日期)
1 小李 1983-12-5 2013-12-5
2 小王 1997-12-29 2013-12-29
ID XM(姓名) SR(生日) ZHHDRQ(转换后的日期) DJS
1 小李 1983-12-5 2013-12-5 datediff(d,zhhdrq,getdate())
2 小王 1997-12-29 2013-12-29 datediff(d,zhhdrq,getdate())
alter table A add DJS as datediff(D,getdate(),year(getdate())+'-'+month(SR)+'-'+day(SR))
ID XM(姓名) SR(生日) DJS
1 小李 1983-12-5 -13
2 小王 1997-12-29 11
/*
6、编写一个函数func_calcdays,计算下一个生日还有多少天,函数
带两个输入参数(生日和当前日期),一个返回值(天数)。
*/
go
if object_id('func_calcdays')is not null
drop function func_calcdays
go
create function func_calcdays(
@birthday as datetime , @currentdate as datetime )
returns int
as
begin
declare @currentage int,@nextbirthday datetime,@days int
if month(@currentdate)>month(@birthday)
--当前月份大于生日所在月份,表示生日已经过了
begin
select @currentage=datediff(yy,@birthday,@currentdate)
select @nextbirthday=dateadd(yy,(@currentage+1),@birthday)
select @days=datediff(dd,@currentdate,@nextbirthday)
end
else
if month(@currentdate)<month(@birthday)
--当前月份小于生日所在月份,生日还没过,生一个生日是去年
begin
select @currentage=datediff(yy,@birthday,@currentdate)
select @nextbirthday=dateadd(yy,@currentage,@birthday)
select @days=datediff(dd,@currentdate,@nextbirthday)
end
else
--当前月份等于生日所在月份
if day(@birthday)>day(@currentdate)--生日日期大于当前日期,生日还没过,且就在当前这一个月
begin
select @days=day(@birthday)-day(@currentdate)
end
else--生日日期小于当前日期,生日已经过了,且就在当前这一个月
begin
select @currentage=datediff