除数等于零

时间:2012-12-09 04:19:04

标签: sql oracle plsql oracle11g divide-by-zero

我有以下数据,但在查询中我得到除零的零问题。所以我希望以下两种形式给出输出。

drop table t;

create table t (id number(9), val1 number(9), val2 number(9));
insert into t values (1,23,2);
insert into t values (2,0,4);
insert into t values (3,7,4);
insert into t values (4,0,3);
insert into t values (5,4,6);

从t中选择sqrt(val2 * val1)/ val1;

SQL> / 错误: ORA-01476:除数等于零

预期的结果

有两种形式 第一次查询 像这样

        ID SQRT(VAL2*VAL1)/VAL1
---------- --------------------
         1           .294883912
         2                    0
         3           .755928946
         4                    0
         5           1.22474487

第二个查询 像这样

       ID SQRT(VAL2*VAL1)/VAL1
---------- --------------------
         1           .294883912
         3           .755928946
         5           1.22474487

3 个答案:

答案 0 :(得分:4)

您可以使用

select sqrt(val2*val1)/val1 from t where val1 != 0;

这将避免val1为0的行,因此不会导致“除以0”错误。这应该给你第二种格式。

对于要在输出中显示0的第一种格式,可以在where子句中使用case语句。

select id, 
case 
    when val1 = 0 then 0
    when val1 != 0 then sqrt(val2*val1)/val1
end
from t 

答案 1 :(得分:4)

考虑使用DECODE和NVL。在DECODE中(if / then / else)指定带或不带零的逻辑。如果您想使用其他值,请使用NVL。

解码示例:

SELECT DECODE(val1, 0, NULL, sqrt(val2*val1)/val1)  from t;

希望这会有所帮助。

答案 2 :(得分:2)

在您的数据插入into t values (2,0,4);中,val1为0,因此不允许将此除以0.因此,您需要检查第一个天气val1是否为0然后执行此操作。