Может кто-нибудь сказать мне, почему мое заявление case возвращает нуль - PullRequest
0 голосов
/ 11 июля 2019

У меня есть запрос возврата null (хорошо) с инструкциями 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 |б |системный |результат

ноль |нуль |10-ИЮЛЬ-19 | хорошо

ноль |нуль |10-ИЮЛ-19 | хорошо

ноль |нуль |10 июля 19 | хорошо

ноль |нуль |10-ИЮЛ-19 | хорошо

У меня есть выход при выполнении этого запроса (или двух других)

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

вывод (где запрос):

a |б |sysdate

10-APR-15 |06-Апрель-15 |10-ИЮЛЬ-19 |

06-APR-15 |06-Апрель-15 |10-ИЮЛ-19 |

02-APR-15 |01-апреля-15 |10-ИЮЛЬ-19 |

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

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

1 Ответ

0 голосов
/ 11 июля 2019

Когда оператор where получает null значений, он возвращает unknown, что исключает запись из набора результатов.

Подробнее о трехзначной логике в SQL Server (просто Google :)).

Вот почему вы не получаете никаких записей.Например, сопоставление со столбцом a, где a всегда null, не дает никаких записей в rsult.

Вам необходимо использовать функции coalesce или similair "null -preventing".

...