使用ISNULL函数没有给出正确的值

时间:2015-08-17 10:21:33

标签: sql-server isnull

我正在使用MSSQL中的一个查询:

select company_id,isshowable from company where company_id in (1,2);

它会得到如下结果:

 company_id | isshowable    
      1     |    NULL  
      2     |    true  

这里,company_id 1具有isshowable = NULL值。当我使用此查询应用isnull函数时:

select isshowable, company_id
from company
where company_id in (1,2)
    and (isshowable='true' OR isshowable = ISNULL(isshowable,'true'));                                                   

它只提供一条记录,其中有company_id = 2.为什么ISNULL函数没有用'true'替换NULL值?

我的要求是两个记录都应该从数据库中获取,NULL值应该替换为'true'。

应该采用什么方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

因为NULL<> 'true'

您的WHERE条款:

isshowable = ISNULL(isshowable, 'true'))
如果isshowableNULL,则

返回false。请记住,如果第一个参数是ISNULLNULL函数将返回第二个参数。因此,在这种情况下,您的ISNULL会返回true。但是等式的左边仍然是NULL,所以它变成了:

`NULL` = 'true'

,正如您所知,falseWHERE子句的目的。 (请注意,SQL Server使用三值逻辑,因此NULL = false实际上是= UNKNOWN)

为达到理想的结果,您的WHERE条款应为:

WHERE
    company_id in (1,2) 
    AND (isshowable = 'true' OR isshowable IS NULL)