oralce处理null值的方法

来源:互联网 发布:淘宝客佣金计算规则 编辑:程序博客网 时间:2024/06/03 20:04

oracle在查询是有可能出现null值,但是显示的时候有不想显示为null。

这里提供几种函数用于处理null值的显示

第一种

--null函数  返回表达式中第一个不为null的表达式coalesce
select coalesce(null,9-9,null) from dual;

这种方式其实 的意思是,返回不是null的值,这种方式的好处在于,可以给予固定的顺序,逐级的向下对比。返回的是最终不为null的方法,但是如果全部为null的话,可能就会有一些限制,他不会返回任何的值,于是就会返回一个类似与null的空。

--第二种nvl

select nvl(null,0) from dual;

这种方式就可以完全的避免null值,当为null值的时候,就会返回0. 但是此种方法会有一种缺陷,就是参数一和参数二

必须满足至少能够隐式的转换。列入下面的就会报错:

--select nvl(12,'ab') from dual; 报错 参数类型不一致  它会报无效的数字,因为'ab'无法变为数字类型。使用的时候需要注意。

--排除指定条件函数lnnvl

select * from city where lnnvl(cid>4);

这个函数会将city中cid大于4的数据过滤掉,相当于返回的数据为cid小于等于4的数据。


面试的时候遇到一个问题,在这里顺手记下。面试的题目为,如果一张表中存在了多条相同的数据要删掉其他多余的数据,怎么做到。从网上看到些方法,感觉不是特别的好。这里在看书的时候无意中看到了一个利用自连接的方式实现的。

这个面试题中由于数据相同你不能利用表中的数据来作为参考,所以只能利用数据库中的rowid来作为参考实现。

select c.rowid from city c,city c1 where c.cid=c1.cid and c.rowid<c1.rowid

这条sql可以返回rowid最小一个rowid 那么只需要稍稍改变下sql就可以返回出那些大于最小rowid的sql。

select * from city  a where a.rowid in (select c.rowid from city c,city c1 where c.cid=c1.cid and c.rowid>c1.rowid) ;



写博客,用于理解和记忆,总结自己学到的东西,必要时可以查询,也希望能帮助到有需要的朋友。

以上是常用的时间函数,如果有朋友有更好的方法和思路可以在下方留言分享。谢谢!