我正在使用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'。
应该采用什么方法来实现这一目标?
答案 0 :(得分:1)
因为NULL
<> 'true'
。
您的WHERE
条款:
isshowable = ISNULL(isshowable, 'true'))
如果isshowable
为NULL
,则返回false。请记住,如果第一个参数是ISNULL
,NULL
函数将返回第二个参数。因此,在这种情况下,您的ISNULL
会返回true
。但是等式的左边仍然是NULL
,所以它变成了:
`NULL` = 'true'
,正如您所知,false
是WHERE
子句的目的。 (请注意,SQL Server使用三值逻辑,因此NULL = false实际上是= UNKNOWN)
为达到理想的结果,您的WHERE
条款应为:
WHERE
company_id in (1,2)
AND (isshowable = 'true' OR isshowable IS NULL)