计算两个日期间隔(SQL)

/*
如果开始日期大于结束日期,返回null
如果天不够向上一月借
如果月不够向上一年借
*/
CREATE FUNCTION Jiange(@S DATE,@E DATE)
RETURNS VARCHAR(50)
AS
BEGIN  
	DECLARE @rst VARCHAR(50)=''
	DECLARE @Y1 INT,@Y2 INT,@M1 INT,@M2 INT,@D1 INT,@D2 INT,@Y INT,@M INT,@D INT 
	SELECT @Y1=YEAR(@S),@Y2=YEAR(@E),@M1=MONTH(@S),@M2=MONTH(@E),@D1=DAY(@S),@D2=DAY(@E)

	IF @S>@E 
		RETURN NULL
	IF @D2>=@D1 
		SET @D=@D2-@D1
	ELSE
	BEGIN
		SET @E=DATEADD(MONTH,-1,@E)	
		SELECT @Y1=YEAR(@S),@Y2=YEAR(@E),@M1=MONTH(@S),@M2=MONTH(@E) 
		SET @D=DAY(EOMONTH(@E))+@D2-@D1
	END 

	IF @M2>=@M1
	   SET @M=@M2-@M1
	ELSE 
	BEGIN
		SET @E=DATEADD(YEAR,-1,@E)
		SELECT @Y1=YEAR(@S),@Y2=YEAR(@E)
		SET @M=12+@M2-@M1
	END   

	SET  @Y=@Y2-@Y1

	IF @Y>0
		SET @rst=@rst+CONVERT(VARCHAR(10),@Y)+'年'
	IF @M>0
		SET @rst=@rst+CONVERT(VARCHAR(10),@M)+'月'
	ELSE IF (@Y>0 AND @M=0 AND @D>0)
		SET @rst=@rst+'零'
	IF @D>0
		SET @rst=@rst+CONVERT(VARCHAR(10),@D)+'天'

	RETURN @rst	
END

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值