如何在SQL的WHERE子句中使用ISNULL?BIT列空值处理疑问
问题解答
首先你的第一个查询语句是完全正确的:
select code from tbl_sample where (bcode = 0 or bcode is null)
它能准确筛选出bcode为0或者NULL的条目——因为NULL不能用=直接判断,必须用is null来匹配,OR逻辑会同时命中两种符合条件的情况。
再看你提到的两种简化写法:
第一种简化写法是可行的:
select code from tbl_sample where isnull(bcode, 0) = 0ISNULL(bcode, 0)会把bcode为NULL的行替换成0,之后和0比较,就能同时筛选出原本是0或者NULL的条目,逻辑和原语句一致,写法更简洁。第二种简化写法不可行:
select code from tbl_sample where isnull(bcode, '') = 0这里把NULL替换为空字符串
'',而bcode是BIT类型,空字符串无法直接和BIT类型的0做比较,会触发隐式类型转换,要么报错,要么得到不符合预期的结果,所以不要用这种写法。
如果要简化查询,推荐使用ISNULL(bcode, 0) = 0的写法,也可以用COALESCE(bcode, 0) = 0(COALESCE是ANSI标准函数,兼容性更好)。
内容的提问来源于stack exchange,提问作者Jen K
相关产品推荐
相关产品推荐

