自己一个人在家,没什么事情做,突然想起很久没有写东西了,于是.............
经常在对两个日期计算时,不仅想得到单独的年月日,想得到其详细信息,即将日期结果精确到天,下面上一个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