欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【SQL坑】与空值有关的问题

程序员文章站 2022-03-26 15:57:36
...

空值,是指该字段的值为空,但不是null,就相当于该字段的值刚被填好又被删除了,这就回导致与null相关的所有判断都失效。

鬼知道为什么会有这么个东西存在~~~怨念!这里会陆续记录下遇到的与空值相关的问题。

1、不等于符号(<>)会自动过滤空值记录

下面代码只是想用<>剔除等于2的记录,但查询结果为空,而 record_no='20191009121111' 这条记录的flow_status实际为空值,但在<>中则被直接默认剔除了。对于null值而言,该规则同样适用。

select * from purchase_requisition where record_no='20191009121111' and flow_status<>2

2、coalesce会失效

coalesce会依次判断参数是否为null,若不为null则返回该参数值,但flow_status为空值而非null,因此下面的代码会返回一个空值而非是1。

select coalesce(flow_status,1) from purchase_requisition where record_no='20191009121111'

因此这里不能使用coalesce而要用if条件+length()函数进行处理,但要注意这里若要对null值和空值做不同处理,还需要首先判断flow_status是否为null值,然后再判断length()长度。

select if(length(flow_status)=0,1,flow_status) from purchase_requisition where record_no='20191009121111'