【问题标题】:Divide by zero error encountered遇到除以零错误
【发布时间】:2012-10-30 09:50:48
【问题描述】:

我在启动此 SQL 查询时遇到除以零错误:

SELECT CONVERT(VARCHAR(11),CaptureTime,106) 'CaptureTime',
        Type,
        CASE WHEN Unit='g/L' THEN (data1* 0.02586) ELSE data1 END As data1,
        CASE WHEN Unit='g/L' THEN nullif(data2* 0.02586,0) ELSE data2 END As data2,
        CASE WHEN Unit='g/L' THEN nullif(data3* 0.02586,0) ELSE data3 END As data3,
        CASE WHEN Unit='g/L' THEN nullif(data1* 0.02586,0) / nullif(data2* 0.02586,0) ELSE (data1/data2) END As Ratio,
        CASE WHEN Unit='g/L' THEN 'ml/L' ELSE 'ml/L' END As data,
        CASE WHEN Unit='g/L' THEN (data4* 0.01129) ELSE data4 END As data4
FROM something 
where Type ='DATA'
and ID='" + Session["name"].ToString() + "'
Order By CONVERT(DateTime, CaptureTime,101) DESC

【问题讨论】:

标签: asp.net sql divide-by-zero


【解决方案1】:

错误几乎肯定来自这里的第二行:

CASE WHEN Unit='g/L' THEN nullif(data1* 0.02586,0) / nullif(data2* 0.02586,0) " +
    "ELSE (data1/data2)" +  
    "END As Ratio,"

如果单位不是 G/L 并且 data2 为 0,则会出现错误。将其更改为:

CASE WHEN Unit='g/L' THEN nullif(data1* 0.02586,0) / nullif(data2* 0.02586,0) " +
    "ELSE (data1/NULLIF(data2, 0))" +  
    "END As Ratio,"

【讨论】:

    【解决方案2】:

    如果 data2 等于 0,则无法计算比率,因为不能除以零,它总是会输出错误消息。

    我建议你添加一个案例:

    CASE WHEN data2=0 
    THEN 0
    ELSE
        CASE WHEN Unit='g/L' 
        THEN (data1 * 0.02586) / (data2 * 0.02586) 
        ELSE data1/data2
        END 
    END As Ratio,
    

    【讨论】:

    • 是的 data1 和 data2 会是 0 结果会出来 0 怎么办??????我想显示结果 0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多