奇怪的空值问题

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

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 @   Luckyfish小文  阅读(54)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示