问题描述
今天写sql的时候两个字段值明明不相等(一个空,一个不空),但是判断不相等的时候返回时的是false。
原因分析:
经过测试发现,并不是!=,<>不稳定,而是字段值为null时,不能使用!=或者<>比较值,应该使用IS NULL判断是否为空。所以当 a 或b有一个为null时,下面语句都会失效
a!=b a<>b
解决方案:
为了解决NULL带来的“无法判断相等或不等”的问题,我们可以使用NVL函数解决
NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回响应的列名或表达式,主要用于对数据列上的空值进行处理,语法格式如:NVL( string1, replace_with)。
NVL(E1, E2)的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身。
NVL函数返回值类型可以为字符型、日期型、日期时间型、数值型、货币型、逻辑型或nul值,所以很好用。
NVL(a,0)!=NVL(b,0)
NVL(a,0)<>NVL(b,0)
这样写就可以了!
坑无处不在啊!