0
我的函数在一年中运行,以针对预定事务的下一个付款日期作出响应。但是,如果跨越到下一年,则会因“转换日期和/或字符串中的时间时转换失败”而失败。TSQL下一个付款日期二月
第一个日期是选定月份的开始。第二个日期是一个交易的到期日期,从许多具有日期的交易列表中输入。它一年到来,直到我过了年底。
我该如何解决这个问题以回答正确的日期?
SELECT dbo.NextPaymentDate('2/1/2017', '1/30/2017')
返回2017年2月28日
SELECT dbo.NextPaymentDate('2/1/2017', '12/30/2016')
返回
转换失败时转换的日期和/或时间从字符串
代码:
--SELECT dbo.NextPaymentDate('2/1/2017','12/30/2016')
ALTER FUNCTION [dbo].[NextPaymentDate]
(@RegisterDate DATE, @PaymentDueDate DATE)
RETURNS DATE
AS
BEGIN
DECLARE @returnDate DATE, @MonthDiff int
SET @MonthDiff = MONTH(@RegisterDate) - MONTH(@PaymentDueDate)
SELECT @returnDate =
CAST(CONVERT(varchar, YEAR(@RegisterDate)) + '-'
+ CONVERT(varchar, MONTH(@RegisterDate)) + '-'
+ CONVERT(varchar, DAY(DATEADD(mm, @MonthDiff, @PaymentDueDate))) AS DATE)
RETURN @returnDate
END
使用std日期格式工作,并强制转换为日期时间 – McNets
感谢mcNets,这让我开始思考整个过程,并为这是造成这一问题的@MonthDiff。 – AdamRoof
如果您使用SQL Server 2012+,请考虑使用'DATEFROMPARTS'而不是使用日期表示形式构建字符串并将其转换为'date'。 –