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'。 –