Int*_*eer 5 sql t-sql sql-server
如何在案例中嵌入和if语句.这就是我到目前为止所拥有的.
DECLARE @LDCCode as int
DECLARE @InvoiceDate as datetime
DECLARE @PaymentSemiMonthlyDays AS int
SET @LDCCode = 20
SET @InvoiceDate = '5/16/2012'
DECLARE @InvDateDayMonth AS INT
DECLARE @ReturnDate AS DATETIME
SET @ReturnDate = @InvoiceDate
DECLARE @PaymentDOM AS INT
DECLARE @PaymentDays AS INT
DECLARE @PaymentSemiMonthlyOffset AS INT
SET @ReturnDate = CASE WHEN NOT @PaymentDOM IS NULL THEN
@ReturnDate + (@PaymentDOM - DATEPART(day, DateAdd(mm,1,@ReturnDate)))
WHEN NOT @PaymentDays IS NULL THEN
DATEADD(Day,@PaymentDays,@ReturnDate)
WHEN NOT @PaymentSemiMonthlyOffset IS NULL THEN
IF @LDCCode = 40 AND @InvDateDayMonth > 11 AND @InvDateDayMonth < 26
SELECT @ReturnDate + (@PaymentSemiMonthlyOffset - DATEPART(day, DateAdd(mm,1,@ReturnDate)))
ELSE
SELECT @ReturnDate + (@PaymentSemiMonthlyDays - DATEPART(day, DateAdd(mm,1,@ReturnDate)))
END
Run Code Online (Sandbox Code Playgroud)
您不能以这种方式组合逻辑,但您可以添加嵌套CASE的现有CASE语句:
SET @ReturnDate = (CASE WHEN NOT @PaymentDOM IS NULL THEN
@ReturnDate + (@PaymentDOM - DATEPART(day, DateAdd(mm,1,@ReturnDate)))
WHEN NOT @PaymentDays IS NULL THEN
DATEADD(Day,@PaymentDays,@ReturnDate)
WHEN NOT @PaymentSemiMonthlyOffset IS NULL THEN
CASE WHEN @LDCCode = 40 AND @InvDateDayMonth > 11 AND @InvDateDayMonth < 26 THEN
@ReturnDate + (@PaymentSemiMonthlyOffset - DATEPART(day, DateAdd(mm,1,@ReturnDate)))
ELSE
@ReturnDate + (@PaymentSemiMonthlyDays - DATEPART(day, DateAdd(mm,1,@ReturnDate)))
END
END)
Run Code Online (Sandbox Code Playgroud)
但是,如果这是在存储过程中,我可能只选择更简单的IF/THEN/ELSE结构而不是CASE:
IF @PaymentDOM IS NULL
SET @ReturnDate = @ReturnDate + (@PaymentDOM - DATEPART(day, DateAdd(mm, 1, @ReturnDate)))
ELSE IF NOT @PaymentDays IS NULL
SET @ReturnDate = DATEADD(Day,@PaymentDays,@ReturnDate)
ELSE IF NOT @PaymentSemiMonthlyOffset IS NULL
BEGIN
IF @LDCCode = 40 AND @InvDateDayMonth > 11 AND @InvDateDayMonth < 26
SET @ReturnDate = @ReturnDate + (@PaymentSemiMonthlyOffset - DATEPART(day, DateAdd(mm, 1, @ReturnDate)))
ELSE
SET @ReturnDate = @ReturnDate + (@PaymentSemiMonthlyDays - DATEPART(day, DateAdd(mm, 1, @ReturnDate)))
END
Run Code Online (Sandbox Code Playgroud)