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

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

由于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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15042150/viewspace-624623/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值