0
正在嘗試通過以下限制使用發票日期來計算到期日需要使用SQL Server的功能
將有兩個文本框一個是輸入月份的一天,另一種是計算截止日期援助輸入前一個月的前一天
如果月份的日期爲4且到期月份的前一天的日期爲5,我們必須通過減去4和5來計算值,如果減去的值爲-ve 1並且發票日期輸入的是2016年11月13日,以便截止日期必須是2017年4月12日(這裏是每月的一天)
如果月份的日期爲15,且到期月份的日期爲5並且扣除的值爲10(非負值),則輸入的發票日期爲11/13/2016表示到期日期必須爲12/15/2016 (這裏是15月的一天),如果發票日期小於或等於像發票日期2016年11月9日減去值即10,則發票日期必須二○一六年十一月一十五日
注以上約束條件還必須滿足閏年的同時計算日期
請幫我看看新的蜜蜂來SQL服務器功能
我已經試過
DECLARE @INVOICEDATE DATETIME ='02/01/2016'
,@TENANTID BIGINT=29
,@PAYMENTTERMID BIGINT=2
BEGIN
DECLARE @DUEDATE DATETIME
DECLARE @ACTUALDUEDATE BIGINT
DECLARE @CALCULATEDDATE DATETIME
DECLARE @PAYMENTTYPES BIGINT
DECLARE @DAYSOFMONTH BIGINT
DECLARE @DAYSAFTERDUEDAY BIGINT
DECLARE @NOOFDAYS BIGINT
SELECT @PAYMENTTYPES = PAYMENT_TYPES
,@NOOFDAYS = NUMBER_OF_DAYS
,@DAYSOFMONTH = DAY_OF_MONTH
,@DAYSAFTERDUEDAY = DAYS_AFTER_DUE_DAY
FROM XC_PAYMENT_TERMS_MASTER
WHERE TENANT_ID = @TENANTID
AND PAYMENT_TERM_ID = @PAYMENTTERMID
IF @PAYMENTTYPES = 1
BEGIN
SET @CALCULATEDDATE = DATEADD(dd, @NOOFDAYS, @INVOICEDATE)
END
ELSE IF @PAYMENTTYPES = 2
BEGIN
SET @ACTUALDUEDATE = @DAYSOFMONTH - @DAYSAFTERDUEDAY
IF 1 = (
IIF(DATEPART(dd, (
EOMONTH(CONCAT (
DATEPART(yyyy, @INVOICEDATE)
,'0201'
))
)) = 29, 1, 0)
)
--LEAP YEAR
BEGIN
IF(@ACTUALDUEDATE <= 0)
BEGIN
IF DATEPART(dd, @INVOICEDATE) = 30
AND DATEPART(mm, @INVOICEDATE) =01
BEGIN
SET @CALCULATEDDATE=DATEADD(dd, 31, @INVOICEDATE)
END
ELSE IF DATEPART(dd, @INVOICEDATE) = 31
AND DATEPART(mm, @INVOICEDATE) =01
BEGIN
SET @CALCULATEDDATE=DATEADD(dd, 31, @INVOICEDATE)
END
ELSE
BEGIN
IF @DAYSOFMONTH = 30 OR @DAYSOFMONTH =31
BEGIN
SET @CALCULATEDDATE= DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0, @INVOICEDATE)+2,0))
END
ELSE
BEGIN
DECLARE @NEWNEGATIVEDATE DATETIME
SET @NEWNEGATIVEDATE = DATEADD(DAY, @DAYSOFMONTH - DATEPART(DAY, @INVOICEDATE), @INVOICEDATE);
SET @DUEDATE = DATEADD(mm, 1, @NEWNEGATIVEDATE)
END
END
END
ELSE IF(@ACTUALDUEDATE > 0)
BEGIN
SELECT 2
DECLARE @COMBINEDDATE DATETIME
SET @COMBINEDDATE=DATEADD(DAY, @ACTUALDUEDATE - DATEPART(DAY, @INVOICEDATE), @INVOICEDATE);
SELECT @INVOICEDATE AS INVDATE
SELECT @COMBINEDDATE AS COMBDATE
IF @INVOICEDATE > @COMBINEDDATE
BEGIN
SELECT 115 AS TRUE
DECLARE @NEWDATE DATETIME
SET @NEWDATE = DATEADD(DAY, @DAYSOFMONTH - DATEPART(DAY, @INVOICEDATE), @INVOICEDATE);
SET @DUEDATE = DATEADD(mm, 1, @NEWDATE)
SELECT @DUEDATE AS DATES
END
ELSE
BEGIN
SET @DUEDATE=DATEADD(DAY, @DAYSOFMONTH - DATEPART(DAY, @INVOICEDATE), @INVOICEDATE);
SELECT @DUEDATE AS DATEDUE
END
END
END
ELSE
--NOT LEAP YEAR
BEGIN
END
END
END
怎麼樣你告訴我們,你在爲了解決這個都試過了,那麼我們會幫你終於解決了它。編輯問題,並添加你到目前爲止的SQL。 –
@ R.Richards請參閱編輯後的代碼 –