ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 计算两个日期之间的整月数

计算两个日期之间的整月数

原创 Linux操作系统 作者:Learnsql 时间:2010-01-07 20:38:28 0 删除 编辑

在论坛里看到这样一则帖子,是说想要计算两个日期之间的整月数,不满整月不算。

由于SQL Server 的DateDiff函数不考虑比指定的日期部分更高的粒度级别,它只考虑更低级别的部分。例如 计算2009-12-31 和 2010-1-1 之间相差的月数,结果是1。所以用Datediff(month,'2009-12-31','2010-1-1') 就不能得到想要的结果0了。所以需要判断是否足月,不是足月要在原月数上减去1 。 

--测试环境 SQL SERVER 2005

--判断是否需要减去1 需要满足下列条件
--1、开始日期的天数要大于结束日期的天数
--2、结束日期的天数要小于结束日期月的天数(即该结束日期月还未足月)

CREATE  FUNCTION fnMonthNum(@FirstDate DATETIME,@LastDate DATETIME)
RETURNS INT
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
 DECLARE @Num INT
 SELECT @Num=datediff(month,@FirstDate,@LastDate) -
  CASE WHEN Day(@FirstDate)>DAY(@LastDate) AND DAY(@LastDate)<32-DAY(@LastDate+(32-Day(@LastDate))) THEN 1 ELSE 0 END
 RETURN @Num
END

---测试

SELECT dbo.fnMonthNum('20091231','20100131')  --1

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15042150/viewspace-624623/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 生日计算
请登录后发表评论 登录
全部评论

注册时间:2008-08-01

  • 博文量
    20
  • 访问量
    47433