2016-04-15 19 views
0

Ich habe Probleme mit der Formel unten. Ziel ist es, ein zukünftiges Datum basierend auf (CEIDAvgUsage-Usage/Burnrate) zu projizieren. Ich habe ziemlich lange nach einer Antwort gesucht und kann etwas hilfreiches finden. Entweder ist der Ausdruck im verwenden falsch oder etwas anderes. Hat jemand Vorschläge.Arithmetischer Überlauffehler Umwandlung in Datentyp datetime

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

Antwort

0

Was genau macht es falsch? Und was genau willst du es tun? Hier ist ein Beispiel für etwas, das funktionieren kann:

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

meine Vermutung ist, dass es diese

(CEIDAvgUsage - Usage)/BurnRate) 

auf ein Datum zu konvertieren versucht

das macht einfach keinen Sinn

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

Sie fügen eine Nummer zu einem Datum hinzu und Sie haben GetDate() auf beiden Seiten

(CEIDAvgUsage - Usage)/BurnRate < 0 

wenn BurnRate positiv

CEIDAvgUsage < Usage 

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