现在的位置: 首页 > 综合 > 正文

用isnull()转换字符类型时要注意

2018年02月07日 ⁄ 综合 ⁄ 共 600字 ⁄ 字号 评论关闭

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...

抱歉!评论已关闭.