0

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

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
4

3 回答 3

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 
于 2012-12-09T04:23:54.797 回答
4

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

解码示例:

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

希望这可以帮助。

于 2012-12-09T04:31:09.640 回答
2

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

于 2012-12-09T04:21:08.720 回答