两个日期间隔 转换成包含年,月,日形式

本文介绍了一个使用SQL实现的自定义函数,该函数用于计算两个日期之间的年、月、日差值。通过具体实例展示了如何应用此函数来获取员工的服务年限。

 

 --用函数实现, 不是最优的,但实现了相关功能
create function dbo.GetDateDiff(@b_date datetime,@e_date datetime)
returns nvarchar(100)
begin
Declare  @str Nvarchar(100)

  select @str=cast(YearNum as varchar(20))+N'年'+cast(MonthNum as varchar(20))+N'月'+cast(Datediff(dd,dateadd(MM,MonthNum,dateadd(YY,YearNum,@B_date)),@E_date) as varchar(20))+N'日'
  from
(
  select case when @e_date>dateadd(YY,datediff(yy,@b_date,@e_date),@b_date)
          then datediff(yy,@b_date,@e_date)  else datediff(yy,@b_date,@e_date)-1 end YearNum
  ,case when @e_date>dateadd(mm,datediff(mm,@b_date,@e_date),@b_date)
      then datediff(mm,@b_date,@e_date)%12  else (datediff(mm,@b_date,@e_date)-1)%12 end MonthNum
) A

return @str
end 

select ID, eName, hireDate 入职日期,dbo.GetDateDiff(hireDate,getdate())  服务日期  from staff

/*
select dbo.GetDateDiff('2007-4-11','2009-5-3')
--返回结果
2年0月22日

*/

相关贴子:

http://topic.youkuaiyun.com/u/20090526/21/29dbb1b6-71c8-46e2-80a5-a4b694462edd.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值