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请参阅编辑后的代码 –