0
私の機能は、予定されている取引の月の次の支払日に応答するために、年間を通じて機能します。しかし、来年にまたがる場合、「文字列から日付や時刻を変換すると変換に失敗しました」というエラーが表示されます。TSQL次の支払日2月
最初の日付は選択した月の開始日です。 2番目の日付は、取引の期日であり、多くの取引のリストからの日付である。私は今年の終わりを過ぎるまで、それは一年中働いています。
正しい日付で返信するにはどうすればよいですか?
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+を使用している場合は、日付表現の文字列を作成し、それを 'date'にキャストするのではなく、' DATEFROMPARTS'を使用することを検討してください。 –