ISNULL ( check_expression , replacement_value )
这个函数比较常用,像数值类型字段常常用这个函数把NULL值转换为0,再进行汇总计算。比如:sum(isnull(hkjs_sl,0))。但如果是字符类型一定要注意,两个参数的类型和长度一定要一致,假如check_expression 是char(1),那么replacement_value的长度不能大于1,否则转换出来就不是我们想要的结果。
是这样的,今天做报表,取一个字段“提货方式”,如果该字段为NULL则默认为‘一票’。因为用isnull已经非常顺手了,就直接这样写:
select *,hkjs_thfs = isnull(hkjs_thfs,'一票') from T_hkjs where...
但查询结果中,thfs是空的,不是NULL,而是空字符串,感觉很奇怪,又到表中一查,发现这几条为空串的正是原值为NULL的。问题就出在ISNULL上。因为字段hkjs_thfs是char(1)类型,所以造成用ISNULL转换时只取参数二的第一位字符,所以为空串。
最后改成这样:
select *,hkjs_thfs = case hkjs_thfs when '0' then '一票' when null then '一票' end from T_hkjs where...