SQL除以零错误,nullif没有帮助

时间:2015-08-26 12:52:44

标签: sql

我正在努力解决这个问题,但无法实现。

从我到目前为止发现的情况来看,我认为我需要为每个除数使用nullif子句,但是当我尝试这样做时它仍然无效。

以下是没有nullif的声明产生零除错误。

(1 - (1 - (x1.hup / (x1.hup / (x1.dp / 100)))) / (1 - (x2.sdp / 100)))

4 个答案:

答案 0 :(得分:2)

可能有更简单的方法来表达这一点。我认为这就是你所需要的:

(1 - (1 - (x1.hup / (x1.hup / nullif(x1.dp / 100, 0)))) / nullif(1 - (x2.sdp / 100)), 0))

答案 1 :(得分:0)

这不是答案

创建一个功能来检查zero这样的

CREATE FUNCTION [dbo].[IsZero] (
    @Number FLOAT,
)
RETURNS FLOAT
AS
BEGIN

    IF (@Number = 0)
    BEGIN
        SET @Number = 1
    END

RETURN (@Number)

END

答案 2 :(得分:0)

不是很优雅但会完成这项工作。

SELECT CASE WHEN (1 - (x2.sdp / 100) = 0 THEN NULL
            WHEN (x1.dp / 100) = 0 THEN NULL
            WHEN (x1.hup / (x1.dp / 100)) = 0 THEN NULL
            WHEN (x1.hup / (x1.hup / (x1.dp / 100))) = 0 THEN NULL
            ELSE (1 - (1 - (x1.hup / (x1.hup / (x1.dp / 100)))) / (1 - (x2.sdp / 100)))
            END AS field
FROM yourtable

答案 3 :(得分:0)

合并为零并不是你正在寻找的神奇子弹。

试着简化你的问题;如果您42 / xxnull,则将其替换为零只会导致除法错误。

我不知道你在这种情况下应用的公式,但你缺少的主要是验证。在上面的示例中,如果x等于0,我们就会遇到问题。

同样,在23 / (100 - x)中,x不能为100,所以您必须事先检查并相应处理情况。如果它是一个除数,则没有表达式可以导致0。

因此,尝试确定在处理之前应该观察哪些约束;例如,您的声明不能接受x1.dpx1.hup的0,而x2.sdp可以是100(1 - 100/100 = 0,不对吗?)。如果其中一种情况发生,您可能会返回错误或其他内容。