谁能告诉我为什么我的案例陈述 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
-预防”功能。
我有一个带有 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
-预防”功能。