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';
分类:
Oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具