只是一个简单的问题,但不知怎的,我无法在这里找到答案。
我有两列(A和B)。两者都包含零和零的数字。我希望得到一个分区,以获得有关每一行之间的比例的信息,但我得到ORA-01476。 我知道除数等于零,但我想在这一行中得到一个数字而不是整个查询的错误
A B
1 5
2 Null
3 0
NULL 3
0 4
4
我正在使用sql developer。
答案 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