Oralce用不等于空串判断查询不出任何数据
由一个sql引发的思考:
select * from z_test1 where id <> ''
先说结果:在oracle中啥也查不出来
原因是:oracle中对空串都会视为NULL处理,如上sql等同于
select * from z_test1 where id <> NULL
但是对NULL执行 = <>结果都是false;
对空的处理需要用函数 IS NULL 或者 IS NOT NULL处理
下面详细说下为啥会有这个问题(多数据库sql兼容问题)
1、我有一个表z_test1,表里有id字段,其中id中存在null和空串的数据
为了方便复现问题,建立表并插入数据
create table z_test1( id VARCHAR(36)) insert into z_test1 (id) values (null) insert into z_test1 (id) values (‘’) insert into z_test1 (id) values (‘111’)
2、只查询id不为空而且不为空串的数据
3、执行如下sql
select * from z_test1 where id is not null and id <> ''
在pg数据库没有任何问题,只查询出了111的那条数据,没有问题
但是拿这个sql去Oracle执行发现并没有查询出数据来,这样就有问题了。
原因是上述Oralce对空串的处理,结论是为了兼容多数据库最好不要在表中插入NULL又插入空串,最好只插入NULL
4、扩展,各个数据对空串的处理是否和Oracle一样,对此查询了各数据库的结果。
sql还是那个sql,看看是否在不同数据库能否查询出数据。
下面是结果
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报