正在处理应返回日期的函数。但是我收到此错误,并且不确定如何解决
if (@flow_date = eomonth(@flow_date) or day(@flow_date) < day(@lMaturityDate)) begin
set @lMaturityDate = eomonth(@lMaturityDate);
end
else begin
if month(@lMaturityDate) < 10 BEGIN
set @month=concat('0',month(@lMaturityDate));
end
else Begin
set @month=month(@lMaturityDate);
END
set @lMaturityDate =convert(date,concat(year(@lMaturityDate),'-',@month,'-',day(@flow_date)))
end
END
return isnull(@lMaturityDate,null);
END
引起错误的示例代码,我只是注意到它抛出错误的时间大于10个月
declare @month varchar(40);
declare @lMaturityDate date = '2019-11-31'
declare @flow_date date = '2019-04-25'
if month(@lMaturityDate) < 10 BEGIN
set @month=concat('0',month(@lMaturityDate));
end
else Begin
set @month=month(@lMaturityDate);
END
set @lMaturityDate =convert(date,concat(year(@lMaturityDate),'-',@month,'-',day(@flow_date)))
select @lMaturityDate
答案 0 :(得分:2)
该函数已被打破,因为它假定流日期的day()都适用于到期日期的月份。显然,在28日之后的任何一天(可能)都不会如此。
例如,如果Flowdate ='2019-06-30'和Maturitydate ='2019-02-28',则您的结果为日期'2019-02-30',这是无效的。
您需要确定如何处理此问题的逻辑。我建议您查找日期中的月份+天>月份中的第一个月的任何日期。如果是这样,则使用该月的最后一天。
这只是一个建议,您可能还有其他规则。