0

我有一个带有 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

一个 | 乙 | 系统日期 | 结果

空 | 空| 19 年 7 月 10 日 |好

空 | 空| 19 年 7 月 10 日 |好

空 | 空| 19 年 7 月 10 日 |好

空 | 空| 19 年 7 月 10 日 |好

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

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

输出(在哪里查询):

一个 | 乙 | 系统日期

15 年 4 月 10 日| 06-APR-15| 19 年 7 月 10 日|

06-APR-15| 06-APR-15| 19 年 7 月 10 日|

02-APR-15| 01-APR-15| 19 年 7 月 10 日|

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

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

1 回答 1

0

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

阅读更多关于 SQL Server 中三值逻辑的信息(谷歌一下 :))。

这就是为什么你没有得到任何记录。例如,comapring to acolumn, where ais always null,在 rsult 中没有记录。

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

于 2019-07-11T05:24:40.690 回答