пытаюсь вычислить из-за дату, используя дату счета с помощью следующих ограниченийНужна помощь в расчете Due Date с помощью функции SQL Server
будет иметь два текстовых поля один должен ввести день месяца, а другой является введите за день до наступления срока платежа
если день месяца составляет 4 и день до истечения соответствующего месяца 5, мы должны рассчитать значения путем вычитания 4 и 5, если вычитаемое значение равно -ve 1, а если дата счета-фактуры введено 13.11.2016, поэтому срок должен быть 12/04/2017 (здесь 04 - день месяца)
если день месяца составляет 15 и день до истечения соответствующего месяца 5, а вычитаемое значение равно 10 (не отрицательное), указанная дата выставления счета - 13.11.2016 означает, что срок должен быть 12/15/2016 (здесь 15 день месяца), если дата счета меньше или равно вычитают значение, т.е. 10, как дата выставления счета 11/09/2016, то дата счета-фактуры должны быть 11/15/2016
Примечание вышеуказанные ограничения также должны удовлетворять високовому году при расчете дат фьюга
Пожалуйста, помогите мне стать новым пчелом для функций 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 см. Код в отредактированном сообщении –