db2 10 往一个测试表里插入空字符串'',但是查询出来后,该字段为null

如题所述

我这里'' 和null是不一样的.db2可以区分的

insert into tab values(1,'JACK','0001','2000');
insert into tab values(2,'TOM','0002','');
insert into tab values(3,'LUCY','0003','3000');
insert into tab values(4,'JAME','0004','');
insert into tab values(4,'KIM','0005',null);

db2 => select * from tab;
select * from tab
ID NAME EMPID SALARY
----------- -------------------------------------------------- ---------- ---------------
1 JACK 0001 2000
2 TOM 0002
3 LUCY 0003 3000
4 JAME 0004
4 KIM 0005 -
5 record(s) selected.
db2 => select * from tab where salary not in ('2000','3000');
select * from tab where salary not in ('2000','3000')
ID NAME EMPID SALARY
----------- -------------------------------------------------- ---------- ---------------
2 TOM 0002
4 JAME 0004
2 record(s) selected.
db2 => select * from tab where salary is null;
select * from tab where salary is null
ID NAME EMPID SALARY
----------- -------------------------------------------------- ---------- ---------------
4 KIM 0005 -
1 record(s) selected追问

您好,你的解释是对的,db2 本来就是分''和null的,Oracle似乎是不分的,但是我现在用的db2 10,结果不分了,应该是数据库哪个配置没有配置好,开始以为是db2 兼容Oracle特性开了,结果给关了依然把''当成null,所以很费解,对于您的感谢,您的回答 我给设为满意了

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-11
根据数据库的不同,数据库是给'' null 也是不同的,你可以采用
is not ll

case when 值 is not null then '' else 'null' end

decode(值,'','空,'null','null值',' ','空格')

length(值)>0

等方式来进行判断本回答被网友采纳
第2个回答  2014-04-16
帮你问了下,只有个大概的答案:
也许是数据库看到你插入的是空就判定你没有插入数据,貌似我以前也遇到过类似的问题,如果还存在有别的非空字段这条数据就会存在追问

您好,按说Oracle插入‘’会变成null ,但是db2 插入的话,应该是跟一般字符一样的,我记得我在其他db2上查询表,where column = ‘’ 这个会把数据中的‘’查出来,但是我现在用的db2 insert into table values ('') 之后,无论从客户端查看,还是通过命令查看,显示数据都为null,而且上面的where条件不起作用