为什么CASE要评估ELSE条款? Oracle 11g:考虑下面两个case语句
搜索的案例为什么CASE要评估ELSE条款? Oracle 11g:考虑下面两个case语句,oracle,null,oracle11g,case,Oracle,Null,Oracle11g,Case,搜索的案例 with null_table as (select null as null_set from dual ) select case when (null_set is null) then 'NULL INDEED' else 'NOTNULL?' end as AM_I_NULL_OR_NOT from null_table with null_table as (select null as null_set from du
with null_table as (select null as null_set from dual )
select
case
when (null_set is null) then 'NULL INDEED'
else 'NOTNULL?'
end as AM_I_NULL_OR_NOT
from null_table
with null_table as (select null as null_set from dual )
select
case null_set
when (null) then 'NULL INDEED'
else 'NOTNULL?'
end as AM_I_NULL_OR_NOT
from null_table
简单案例
with null_table as (select null as null_set from dual )
select
case
when (null_set is null) then 'NULL INDEED'
else 'NOTNULL?'
end as AM_I_NULL_OR_NOT
from null_table
with null_table as (select null as null_set from dual )
select
case null_set
when (null) then 'NULL INDEED'
else 'NOTNULL?'
end as AM_I_NULL_OR_NOT
from null_table
搜索的案例按预期计算null\u集,但简单案例似乎没有这样做
问题:
如何对null\u集执行简单的案例评估
为什么简单案例的计算结果是这样的?在Oracle中,null不能与使用
=
运算符进行比较
例如:
select * from dual where null = null; -- No result
select * from dual where 1 = 1; -- gives a result
因此,您可以使用NVL
将null替换为另一个值:
with null_table as (select null as null_set from dual )
select
case nvl(null_set,'X')
when 'X' then 'NULL INDEED'
else 'NOTNULL?'
end as AM_I_NULL_OR_NOT
from null_table
(确保您的字段永远不能等于示例中的值X。)在Oracle中,null不能与使用
=
运算符进行比较
例如:
select * from dual where null = null; -- No result
select * from dual where 1 = 1; -- gives a result
因此,您可以使用NVL
将null替换为另一个值:
with null_table as (select null as null_set from dual )
select
case nvl(null_set,'X')
when 'X' then 'NULL INDEED'
else 'NOTNULL?'
end as AM_I_NULL_OR_NOT
from null_table
(请确保您的字段永远不能等于示例中的值X。)任何内容都不等于null(即使是null本身)。第二个版本的第一个when不能触发。没有任何东西等于null(甚至null本身)。第二个版本的第一个when永远不会触发。奇怪的是,您可以使用旧的Oracle decode函数,它将匹配null,例如decode(null,null,'it IS null,'it IS NOT null')将返回'it IS null'。LordPeter,也许这就是为什么
decode
多次被认为是与空相关的函数,例如nvl
和nvl2
(),但奇怪的是,您可以使用旧的Oracle解码函数,它将匹配空值,例如decode(null,null,'it is null','it NOT null')将返回'it is null'。LordPeter,也许这就是为什么decode
多次被视为空相关函数,例如nvl
和nvl2
()