奇怪的空值问题

不规范的业务操作中经常会遇到如下情况:

1、表格中的如价格、件数、重量等字段,直接放空;

2、数据库中同样的表示数字的int、float,查询后为空值

 

好了,这样问题就来了:

问题一:其实也就是平常不能再平常的的字符转数字,不过刚好字符为空值,这时不管用int.prase,还是convert等等其它,肯定报“空值”错误!

  答:判断一下,空值不如纳入计算范畴不就完了吗?如果非得纳入计算呢?

 好,假定要转换的字符为str,结果是要把这些空值的字符设定为“0”:

//string自带
string.IsNullOrEmpty(str)?"0":str

//??判断
str??"0"

//常用拼接判断
if(str==""||str==null||str==DBNull){str="0";}  

 正常这种字符空值判断,都是没问题的,但是要把这些字符空值转换成数字时,也就是需要int.prase(str)的结果时,你就会发现只有string.IsNullOrEmpty 有效,其它2种都会报空错,为什么?

问题二:来看一下简单sql语句查询字段类型分别是 varchar、int、float

select COUNT(INBOUND_AWB) as mTicket,SUM(INBOUND_QTY) as mQty,SUM(INBOUND_WEIGHT) as mWeight from INBOUNDCARGO_TB where INBOUND_PICKTIME BETWEEN '2021-08-1' AND '2021-08-31' AND INBOUND_AWB like '%hawb%'

显示的结果:

 查询为空的结果,字段类型不同显示的结果,也不一样;为什么是字符的为0,数字的反而为Null呢?

关于这个问题,已有答案:SUM有数据据则正常统计,无数据返回NULL,无关字段类型;count为计数,无数据时返回计算0

 

 问题三:sql查询语句 “!”,非某某字符,查询的结果不包括null值(勉强算是空值问题,所以一起提问了)

查询语句:

SELECT * from OUTSIDEDELIVERY_TB where OUT_SN='F003088000' and  OUT_STATUS!='作废' 

平时也常用到“!”运算,但最近偶然发现,以上查询的结果,居然不包括null值(即OUT_STATUS为null值时,以上语句查询未果)

好吧,只能修改下:

SELECT * from OUTSIDEDELIVERY_TB where OUT_SN='F003088000' and (OUT_STATUS!='作废' or OUT_STATUS is NULL)

 

posted @ 2021-11-12 16:51  Luckyfish小文  阅读(49)  评论(0编辑  收藏  举报