我有以下数据,但在查询中我得到除零的零问题。所以我希望以下两种形式给出输出。
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
答案 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然后执行此操作。