oracle不等于中包括空,ORACLE 不支持不等于空字符串( '')

之前的应用一直是连接DB2数据库,DB2对空和空字符串的识别是不相等的,如:

-- FALSE

SELECT 1 FROM DUAL WHERE '' IS NULL;

-- TRUE

SELECT 1 FROM DUAL WHERE '' IS NOT NULL;

-- 注意:NULL 不能用 =、!=、<> 进行比较,只能用 IS、IS NOT 进行比较

是没返回记录的,所以在写过滤空字段时要将空和空字符串都过滤掉,一般是这样写

SELECT 1 FROM 表名 WHERE 字段名A IS NOT NULL AND 字段名A <> '';

后面发现,其实一般在写“字段名A <> '某个值'”时,数据库就已经自动把空的数据过滤掉了,如:

SELECT 1 FROM 表名 WHERE 字段名A <> '';

就可以,所以后面过滤空字段时都这样写了。

最近,有个点用的数据库是 ORACLE,而 ORACLE 对空和空字符串的识别是等同的,即 '' 等同于 NULL,这样以前写的

SELECT 1 FROM 表名 WHERE 字段名A <> '';

就相当于

SELECT 1 FROM 表名 WHERE 字段名A <> NULL;

而ORACLE 的 NULL 只能用 IS 或 IS NOT 进行比较,而不能用 = 、!= 、<> 进行比较,用 = 、!= 、<> 比较的结果都是返回 FALSE 的,所以导致数据一直查询不出来。

总结:

为了兼容 DB2 和 ORACLE,最后将SQL改成

-- 将不等于空字符串修改为不等于一个空格,也可以某个长度为 1 且该字段绝对不可能出现的任意值

SELECT 1 FROM 表名 WHERE 字段名A <> ' ';

-- 注意:

-- 正常可以写随便不等于某个值,但由于 DB2 对字段数据长度的严格要求,

-- 假设字段长度为 1 ,这时对比的查询条件长度为 2 (如:ab),这时查询就会报错

-- 假设“字段名B”长度为 1 ,则以下 SQL 在应用中进行查询会报错

SELECT 1 FROM 表名 WHERE 字段名B <> 'ab';

-- 而这样就不会报错了

SELECT 1 FROM 表名 WHERE 字段名B <> 'a';

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值