случай, когда ноль не работает, как ожидалось - PullRequest
15 голосов
/ 03 августа 2011

рассмотрим этот очень короткий код T-SQL, который выполняет тест на обнуляемом столбце с использованием регистра

declare @t table(data varchar(10) null)
insert into @t values('something')
insert into @t values(null)

select data, 
    case data when null
        then 'missing'
        else 'not missing'
    end as test
from @t

вывод, который я получаю:

data        test
---------   -----------
something   not missing
NULL        not missing

Однако то, что я ожидал, было

data        test
---------   -----------
something   not missing
NULL        missing

Чего мне не хватает в тесте на это обнуляемое значение

Ответы [ 4 ]

40 голосов
/ 03 августа 2011

Вы хотите поставить что-то вроде этого:


select data,      
case when data is null         
then 'missing'         
else 'not missing'     
end as test from @t 

2 голосов
/ 03 августа 2011

регистр может не работать с нулем.Используйте coalesce или isnull.

declare @t table(data varchar(10) null)
insert into @t values('something')
insert into @t values(null)

select data, 
case coalesce(data, 'missing')
    when 'missing' then 'missing'
    else 'not missing'
end as test
from @t
1 голос
/ 03 августа 2011

должно быть как ниже

select data,
(case when data is null then 'missing' else 'not missing' end) as test from @t
1 голос
/ 03 августа 2011
declare @t table(data varchar(10) null)
insert into @t values('something')
insert into @t values(null)
select data,     
case  when data  is null     
 then 'missing'        else 'not missing' 
  end as test from @t

Это даст ожидаемый ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...