算术溢出错误转换为数据类型datetime

时间:2016-04-15 18:25:46

标签: tsql date expression ssms-2012

我遇到以下公式的问题。目标是根据(CEIDAvgUsage-Usage / Burnrate)预测未来日期。我一直在寻找答案,并且可以找到任何有用的东西。表达式im使用是错误的还是别的。有没有人有建议。

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)