SQL 计算日期之差,精确到天

                      

   自己一个人在家,没什么事情做,突然想起很久没有写东西了,于是.............

   经常在对两个日期计算时,不仅想得到单独的年月日,想得到其详细信息,即将日期结果精确到天,下面上一个function和一个procedure 用于完成这个功能。

   第一个函数版

   

create function [dbo].[GetYearMonthDayFun](

@begin datetime ,

@end datetime)

returns varchar(50)

as

begin

/*

 * 功能:计算两个日期之差           *

 * 作者:charry0110                 *

 * 描述:返回年月日,结果精确到天,参数为getdate()时计算出生信息*

*/



declare @Ageyear int

declare @Agemonth int

declare @Ageday int



set @Ageyear =datediff(year, @begin, @end)- 

case when dateadd(year, datediff(year, @begin, @end), @begin)> @end 

then 1 else 0 end



set @Agemonth=ltrim(datediff(month, @begin, @end)- 

case when dateadd(month,datediff(month, @begin, @end),@begin)> @end 

then 1 else 0 end)-12*@Ageyear



if(day(@begin)<day(@end) or day(@begin)=day(@end))

set @Ageday=day(@end)-day(@begin)

else

set @Ageday=datediff(day,(ltrim(year(@end))+'-'

           +ltrim(month(dateadd(mm,-1,@end)))+'-'+ltrim(day(@begin))),

(ltrim(year(@end))+'-'+ltrim(month(@end))+'-'+ltrim(day(@end))))



return ltrim(@Ageyear)+'年'+ltrim(@Agemonth)+'月'+ltrim(@Ageday)+'天'





/*

--示例1

select dbo.GetYearMonthDayFun('2008-6-21',getdate())

--示例2

select dbo.GetYearMonthDayFun(crdate,refdate) from sysobjects

--示例3

select dbo.GetYearMonthDayFun(crdate,getdate()) from sysobjects

*/



end

   

   第二个存储过程版

   

create procedure [dbo].[GetYearMonthDayPro]

(

	@begin datetime ,

	@end datetime 

)

as

begin

/*

 * 功能:计算两个日期之差           *

 * 作者:charry0110                 *

 * 描述:返回年月日,结果精确到天,参数为getdate()时计算出生信息*

*/



declare @Ageyear int

declare @Agemonth int

declare @Ageday int



set @Ageyear =datediff(year, @begin, @end)- 

case when dateadd(year, datediff(year, @begin, @end), @begin)> @end 

then 1 else 0 end



set @Agemonth=ltrim(datediff(month, @begin, @end)- 

case when dateadd(month,datediff(month, @begin, @end),@begin)> @end 

then 1 else 0 end)-12*@Ageyear



if(day(@begin)<day(@end) or day(@begin)=day(@end))

set @Ageday=day(@end)-day(@begin)

else

set @Ageday=datediff(day,(ltrim(year(@end))+'-'

           +ltrim(month(dateadd(mm,-1,@end)))+'-'+ltrim(day(@begin))),

(ltrim(year(@end))+'-'+ltrim(month(@end))+'-'+ltrim(day(@end))))



select ltrim(@Ageyear)+'年'+ltrim(@Agemonth)+'月'+ltrim(@Ageday)+'天'





/*

--示例1

exec GetYearMonthDayPro '2008-6-21','2008-7-21'

*/



end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星求索

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值