谁能告诉我为什么我的案例陈述 return null(good)

Can anyone tell me why my case statement return null(good)

我有一个带有 case 语句的查询 return null(good),但是当对每个 case 使用 where 语句时,输出中都有记录。

select a,b,sysdate ,      
 CASE 
     WHEN a IS NULL  AND SYSDATE > b THEN 'O'
     WHEN a IS NULL AND SYSDATE <= b THEN 'W'
     WHEN a > b THEN 'Fail'
     WHEN a <= b THEN 'Pass'
   else 'good'
 END  as result
 from mytable

a | b | sysdate | result

null | null| 10-JUL-19 |good

null | null| 10-JUL-19 |good

null | null| 10-JUL-19 |good

null | null| 10-JUL-19 |good

我在执行这个查询(或其他两个)时有输出

select a,b,sysdate  from mytable 
where a > b 

输出(where查询):

a | b | sysdate

10-APR-15| 06-APR-15| 10-JUL-19|

06-APR-15| 06-APR-15| 10-JUL-19|

02-APR-15| 01-APR-15| 10-JUL-19|

select a,b,sysdate  from mytable 
  where a IS NULL  AND SYSDATE > b 

select a,b,sysdate from mytable
   where a <= b

where 语句获得 null 值时,它会 returns unknown,从结果集中排除记录。

在 SQL 服务器中阅读更多关于三值逻辑的信息(只是 google 它 :))。

这就是您没有获得任何记录的原因。例如,comapring 到 a 列,其中 a 始终是 null,结果中没有记录。

您需要使用 coalesce 或类似的“null-预防”功能。