如何用零和空值划分列

时间:2018-04-10 19:12:41

标签: sql oracle11g

只是一个简单的问题,但不知怎的,我无法在这里找到答案。

我有两列(A和B)。两者都包含零和零的数字。我希望得到一个分区,以获得有关每一行之间的比例的信息,但我得到ORA-01476。 我知道除数等于零,但我想在这一行中得到一个数字而不是整个查询的错误

A    B
1    5
2    Null
3    0
NULL 3
0    4
4

我正在使用sql developer。

2 个答案:

答案 0 :(得分:3)

如果将数字除以零,则会出现错误,因为此类划分的答案未定义。但是,SQL具有未定义的值:filmController。因此,请改为生成结果NULL

NULL

select a, b, case when b = 0 then null else a / b end as ratio
from mytable;

这是标准SQL,适用于Oracle以及其他所有RDBMS。 Oracle还提供函数select a, b, a / case when b = 0 then null else b end as ratio from mytable; 作为在第二个查询中编写表达式的更短方法。

答案 1 :(得分:3)

您可以使用nullif返回null,而不是引发错误:

select  A / nullif(B, 0) as division
from    YourTable

如果您的号码存储为varchar,请在使用前将其转换为数字:

select  to_number(A) / nullif(to_number(B), 0) as division
from    YourTable