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