| 飞 的个人资料二月飞雪日志列表留言簿 | 帮助 |
|
6月7日 Oracle里Null值栏位的查询我们都知道Oracle里的Null值在输入输出时等效于''(空字符串),但是今天发现在Null值查询时却不能简单地把它等同于'',下面是实验过程:
1,建立一个表test
CREATE TABLE test
(a VARCHAR2(1)) / 2,插入三笔记录
INSERT INTO test values (1);
INSERT INTO test values ('');
INSERT INTO test values (2);
3,执行查询SELECT * FROM test WHERE a not in (1);返回如下:
Row # A
1 2
注意没有将A为Null的那条记录查出来
4,执行查询SELECT * FROM test WHERE a in ('', 1);或者SELECT * FROM test WHERE a in (NULL, 1);返回均如下:
Row # A
1 1
另外Null值栏位也不遵循条件比对,比如TableA.Column1 <> TableB.Column1,所有栏位值为Null的都不能被查出.
关于解决方法,首先当然是把Null值情形也作为条件写进去,比如:SELECT * FROM test WHERE a not in (1) or a is null;
另外对于一些比较复杂的查询场合,可以先建立一个View,用NVL函数将所有Null值转换为一个无意义的数据,这样方便后面的查询和统计. 引用通告此日志的引用通告 URL 是: http://wonphy.spaces.live.com/blog/cns!22042D05BB497C1A!310.trak 引用此项的网络日志
|
|
|