You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中CASE判断NULL值失效 查询结果全部返回Closed

问题根因

语句执行结果不符合预期的核心原因是Oracle(所有标准SQL数据库同理)中,NULL值无法通过等值比较判断:

  • 你使用的是CASE简单表达式,写法CASE Account_Close_Date WHEN NULL THEN 'Open'底层逻辑等价于判断Account_Close_Date = NULL
  • SQL中任意值和NULL做=等值比较,返回结果永远不是TRUE,因此这个分支永远不会被命中,所有记录都会走ELSE分支返回Closed
修正方案

两种可正常运行的写法:

写法1:标准搜索型CASE表达式(通用所有SQL数据库)

用IS NULL做NULL值判断,这是SQL标准规定的NULL判断语法:

select 
  CASE WHEN Account_Close_Date IS NULL THEN 'Open'
       ELSE 'Closed' 
  END as Status, 
  Account_Close_Date 
from customer_account_Table

写法2:用Oracle内置NVL2函数(Oracle专属简洁写法)

NVL2(字段, 非空返回值, 空返回值)是Oracle专门处理空值判断的内置函数,刚好匹配当前业务逻辑:

select 
  NVL2(Account_Close_Date, 'Closed', 'Open') as Status,
  Account_Close_Date
from customer_account_Table
异常执行结果参考

执行结果示例

内容的提问来源于stack exchange,提问作者Little_Tomato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:30:46