2016-04-15 16 views
0

以下の式に問題があります。目標は、(CEIDAvgUsage-Usage/Burnrate)に基づいて将来の日付を投影することです。私はいつか答えを探していて、何か助けになるものを見つけることができます。使用する式が間違っているか、何か他のものです。誰にでも提案はありますか?データ型datetimeに変換する算術オーバーフローエラー

RIGHT (CONVERT (varchar, CASE WHEN (GetDate() + (CEIDAvgUsage - Usage)/BurnRate) < GetDate() THEN GetDate() 
ELSE (Getdate() + (CEIDAvgUsage - Usage)/BurnRate) 
END, 103), 7) 

答えて

0

正確には間違っていますか?そして、あなたは正確に何をしたいのですか?ここで働くことが何かの例です:

DECLARE @CEIDAvgUsage INT = 40 
    , @Usage INT = 20 
    , @BurnRate INT = 2 

SELECT CAST(DATEADD (dd,CASE WHEN (@CEIDAvgUsage - @Usage)/@BurnRate <= 0 
THEN 0 ELSE (@CEIDAvgUsage - @Usage)/@BurnRate END,GETDATE()) AS DATE) 
0

私の推測では、単に意味をなさない

日にこの

(CEIDAvgUsage - Usage)/BurnRate) 

を変換しようとしていることであるが

(GetDate() + (CEIDAvgUsage - Usage)/BurnRate) < GetDate() 

日付に数値を追加していて、両側にGetDate()がある

(CEIDAvgUsage - Usage)/BurnRate < 0 

BurnRateが正である場合

CEIDAvgUsage < Usage 

RIGHT (CONVERT (varchar, CASE WHEN CEIDAvgUsage < Usage THEN GetDate() 
           ELSE DateAdd(dd, Getdate(), (CEIDAvgUsage - Usage)/BurnRate) 
          END 
       , 103) 
     , 7) 
関連する問題