关于CASE WHEN的一个疑问,请大神帮忙解答

LC1990313 2016-06-29 01:27:53
遇到一个问题,直接进入主题了

举个栗子:
UPDATE SUTDENT SET AGE = (CASE AGE
WHEN NULL THEN 1
ELSE AGE +1)


UPDATE SUTDENT SET AGE = (CASE
WHEN AGE IS NULL THEN 1
ELSE AGE +1)


第一个AGE为NULL的时候命中不到,而第二个就可以,为什么?
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DeathPool 2016-06-29
  • 打赏
  • 举报
回复
CASE AGE WHEN NULL THEN 1 ELSE AGE +1
ghx287524027 2016-06-29
  • 打赏
  • 举报
回复
对于 CASE AGE WHEN NULL THEN 1 ELSE AGE +1 判断条件时应该采用的是判等操作,及 “ = ”,而对于 null,在oracle中,判断一个字段或者一个变量是否为null 语法是 is null。返回的结果是boolean型。如果使用 = null,会返回null。这也正是为什么第二种case when可以达到预期效果。
卖水果的net 2016-06-29
  • 打赏
  • 举报
回复

SQL> 
SQL> with m as (
  2  select 100 c from dual
  3  union all
  4  select null from dual
  5  )
  6  select decode(c,null,1,c+1) a , -- 建议使用
  7         case when c is null then 1 else c +1 end b, -- is null
  8         case c when null then 1 else c + 1 end c -- = null
  9    from m ;
         A          B          C
---------- ---------- ----------
       101        101        101
         1          1 

SQL> 
califord 2016-06-29
  • 打赏
  • 举报
回复
第一个改成 UPDATE SUTDENT SET AGE = (CASE AGE WHEN IS NULL THEN 1 ELSE AGE +1) 试试

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧