oracle 查询 空值 注意不是 null

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 查询 空值 注意不是 null相关的知识,希望对你有一定的参考价值。

为什么我用下面两个语句都查不出数据 :
select count(*) from A where nvl(b,'') = ''
和select count(*) from A where nvl(b,'') <> ''

我的表A里有大量数据,为什么用上面两个都查不到呢

1、首先查询业主表中的地址id,不重复显示。

2、然后对t_account标按使用量进行升序排序,默认是升序,asc可以省略。

3、接着对t_account表按使用量进行降序排序。

4、然后通过rownum伪列可以限制查询结果集中返回的行数。

5、最后空值查询——①查询t_pricetable表中maxnum为空的记录;②查询t_pricetable表中maxnum不为空的记录。

参考技术A oracle中varchar,varchar2,nvarchar,nvarchar2的区别

1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;

VARCHAR2把空串等同于null处理

因此, 你那里的
select count(*) from A where nvl(b,'') = ''
和select count(*) from A where nvl(b,'') <> ''

被 等同为
select count(*) from A where nvl(b,null) = null
和select count(*) from A where nvl(b,null) <> null

所以查询不出数据。

参考资料:http://apps.hi.baidu.com/share/detail/18768651

本回答被提问者采纳
参考技术B oracle中没有空字符串的,只有null,而且判断是否非空只能用is null或is not null,与null的运算,结果仍然是null。 参考技术C ‘’在oralce 就是null值,
你查询下 select count(*) from A where b is not null and trim(b) is null 看看
如果不行,看看b里是否有全角的空格
参考技术D select count(*) from A where nvl(b,' ') = ' '
select count(*) from A where b is null
select count(*) from A where b is not null

oracle 不等于1怎么查?

有个字段number, 可以为空,内容是数字,
我现在要查找不为1的,其它的数字和空值的都可以,这个查询要怎么写?

查找方法如下:

空值null比较特殊,它不能通过=或者<>进行查询,只能用is null或者is not null进行查询,例如你的数据中有null值,那么用 字段名=1,字段名<>1,字段名=null都不能把这条数据检索出来,只有字段名 is null能检索出来。
所以需要查询的数据有两种,为null的,或者不等于1的,转化为sql就是
select * from 表 where 字段名 is null or 字段名 <> 1。

oracle体系:

oracle的体系很庞大,由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成。

(1)控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件

(2)数据文件:存储数据的文件

(3)重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件

(4)参数文件:定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大小的参数

(5)归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

(6)密码文件:认证哪些用户有权限启动和关闭Oracle例程。

参考技术A 可以选择先查询全表,再查询字段=1的,两者做差集,sql为
select * from 表
minus
select * from 表 where 字段名=1
参考技术B 空值null比较特殊,它不能通过=或者<>进行查询,只能用is null或者is not null进行查询,例如你的数据中有null值,那么用 字段名=1,字段名<>1,字段名=null都不能把这条数据检索出来,只有字段名 is null能检索出来。
所以你需要查询的数据有两种,为null的,或者不等于1的,转化为sql就是
select * from 表 where 字段名 is null or 字段名 <> 1本回答被提问者采纳
参考技术C 假如你要查询A表,由于空值不能判断,固需要把空值进行转换

select * from A where nvl(number,10)<>1;
希望帮到你!
参考技术D select * from tab1 where num is null or num <> 1;

==附
create table tab1(id number,num number); -- 创建表
--插入测试数据
insert into tab1 values(1,1);
insert into tab1 values(2,2);
insert into tab1 values(3,null);
select * from tab1 where num is null or num <> 1;

以上是关于oracle 查询 空值 注意不是 null的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SELECT 查询:配对日期时折叠空值

Oracle数据库 拾漏补缺

access 查询空值和null值的区别

oracle 不等于1怎么查?

SQL中空值查询''与null 的区别

如何写sql语句去掉oracle返回结果中的空值(NULL)