DB2中NULL值和空字符串问题
2013-11-26 23:05
295 查看
一直以为空字符串是就是NULL,当插入空字符串的时候就可以通过NULL,但是前段时间开发发现使用not in特定值后发现,空字符集居然也没有包括在内,当时我也认为,应该包括在内,后来做了个如下测试发现其实在DB2中NULL和空串真不是一回事。
create table tab
( id integer not null,
name char(50),
empid char(10),
salary char(15)
);
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是一个不确定值,可以代表任何值,所以不包括在任何一个指定集合中,并且NULL的值不能通过列值过滤,只能通过IS NULL 或者IS NOT NULL方式过滤,所以上面你可以看到这样的结果,这个貌似和oracle的不同,所以不同的数据库还是不一样的,不能直接套用,多动手测试,实践出真知。
create table tab
( id integer not null,
name char(50),
empid char(10),
salary char(15)
);
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是一个不确定值,可以代表任何值,所以不包括在任何一个指定集合中,并且NULL的值不能通过列值过滤,只能通过IS NULL 或者IS NOT NULL方式过滤,所以上面你可以看到这样的结果,这个貌似和oracle的不同,所以不同的数据库还是不一样的,不能直接套用,多动手测试,实践出真知。
相关文章推荐
- DB2 自动递增字段实现方法
- 创建一个空的IBM DB2 ECO数据库的方法
- IBM DB2 Connect简介(1)
- DB2 日期和时间的函数应用说明
- DB2 常用命令速查(备忘)
- DB2 常用命令小结
- DB2比较常用与实用sql语句总结
- db2 导入导出单个表的操作详解
- DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 .
- 比较SQL Server与Oracle、DB2
- 基于不要返回null之EmptyFactory的应用详解
- sql 语句中的 NULL值
- ASP 空字符串、IsNull、IsEmpty区别分析
- JavaScript中为什么null==0为false而null大于=0为true(个人研究)
- JavaScript Undefined,Null类型和NaN值区别
- MS Server和Oracle中对NULL处理的一些细节差异
- 解析C语言中空指针、空指针常量、NULL & 0的详解
- SQL Server、Oracle和MySQL判断NULL的方法
- jquery获取下拉列表的值为null的解决方法
- 区分JS中的undefined,null,"",0和false