2011-05-20 37 views
0

這就是我想要做的。我將把下面的代碼改成SP,它帶有兩個參數@startdate和@transactionDate,它將返回NextTransactiondate。邏輯是@startdate決定一週中的哪一天。 @NexttransactionDate應該等於transactiondate後面的那一天。因此在這個例子中,起始日是星期三,所以下一個交易日期應該是 - 2011-05-04'。在下面的代碼中,它總是計算到星期五,但它應該根據當天動態計算。任何幫助表示讚賞?如果您通過日期,如何獲得NextDayofWeek?

declare @TransactionDate datetime 
declare @startDate datetime 
declare @startDay int 
declare @NextTransactionDate datetime 
--Monday 
set @TransactionDate = '2011-05-02' 
--Wednesday 
set @startDate = '2011-04-27' 
set @startDay = datepart(dw,@startDate) 

set @NextTransactionDate= DATEADD(DAY,(CASE DATEPART(DW,@TransactionDate) 
    WHEN 7 THEN 6 
    WHEN 6 THEN 7 
    ELSE 6 - DATEPART(DW,@TransactionDate) 
    END),@TransactionDate); 

print @NextTransactionDate 
+0

@NextTransactionDate必須是週一到週五嗎? – IMAbev 2011-05-20 20:57:29

回答

0

我不確定我是否按照你所說的去做。我認爲你是說下一個@TransactionDate應該是@startDate所在的星期幾的下一次發生。

如果是這樣的話,你可以嘗試:

declare @tDay = datepart(w, @transactionDate) 

set @NextTransactionDate = DATEADD(w, @[email protected], @TransactionDate); 

我不知道你用6和7,但...你想確保新@TransactionDate是做什麼的不是週末?如果是這樣,這將需要稍微修改...

1

試試這個:

 

declare @TransactionDate datetime 
declare @startDate datetime 
declare @startDay int 
declare @transactionDay int 
declare @NextTransactionDate datetime 
declare @daysToAdd int 

--Monday 
set @TransactionDate = '2011-05-02' 
set @transactionDay = datepart(dw,@TransactionDate) 

--Wednesday 
set @startDate = '2011-04-27' 
set @startDay = datepart(dw,@startDate) 

print @transactionDay 
print @startDay 

if(@startDay <= @transactionDay) 
    set @daysToAdd = (@startDay + 7) - @transactionDay 
else 
    set @daysToAdd = @startDay - @transactionDay 

set @NextTransactionDate = Dateadd(Day,@daysToAdd,@TransactionDate) 
print @NextTransactionDate 
 
2

下面的工作對我來說:

declare @TransactionDate DATETIME 
DECLARE @TransactionDay tinyint 
declare @startDate datetime 
declare @startDay int 
declare @NextTransactionDate datetime 
--Monday 
set @TransactionDate = '2011-05-05' 
SET @TransactionDay = DATEPART(dw, @TransactionDate) 
--Wednesday 
set @startDate = '2011-04-27' 
set @startDay = datepart(dw,@startDate) 



set @NextTransactionDate= DATEADD(DAY, ((@startDay - @TransactionDay) + 7) % 7 ,@TransactionDate); 

select @startDay, DATEPART(dw, @NextTransactionDate), @NextTransactionDate 

要解釋它的肉,我找到startDate和transactionDate在一週中的差異。我加14,因爲負數模正數會導致負數,這會讓您的下一個交易日期成爲過去(並且您不希望這樣做)。最糟糕的情況是@startDay是1,@TransactionDay是7導致-6的差異。添加7可以確保這種差異是正面的,但仍然與環模7中的實際差異處於相同的等價類中(抱歉...我是一個數學書呆子)。

+0

用於使用mod運算符而不是我的'if'語句:) – 2011-05-21 00:27:10