比如select nvl(0,'未知')from dual
报错:ORA-01722: 无效数字
select nvl(0,'888')from dual 就ok 不知道有没有个函数能判断空值并返回一个默认值(要支持字符的)不要说自己写一个函数,这个毕竟没有oracle带的方便,要用于移植的多谢大家了
报错:ORA-01722: 无效数字
select nvl(0,'888')from dual 就ok 不知道有没有个函数能判断空值并返回一个默认值(要支持字符的)不要说自己写一个函数,这个毕竟没有oracle带的方便,要用于移植的多谢大家了
解决方案 »
- liunx下oracle数据库的备份
- Oracele 存储过程 游标循环?
- 新人请教:如果给一个几乎完全不懂计算机的人描述某种数据的查询过程,这样可不可以?
- [急]200分求函数中公式计算
- 如何在客户端建立Oracle9i数据库(在线等)
- 我在delete结束后,就要commit时,居然网络中断了,请问....
- oracle9i 安装中的问题
- 能否把一个数据库中的内容导入到另外一个数据库,两者的sid不同.
- 请问Database,Schema,Catalog三者之间的区别
- 出现"ORA-03113:通信通道的文件结束",怎么办?
- 如何在没建表的情况下,使执行结果是对的。
- 用户表,建立时在库在是否存在唯一 的编号(ID)
请注意NULL和0的区别。
使用nlv(exp1,exp2),当exp1和exp2类型不一致的时候,会进行类型转换。
你的例子中,
1.使用nvl(0,'未知'),oracle会将'未知'转换成数字,所以报ORA-01722: 无效数字;
2.使用nvl(0,'888'),会将'888'转换数字,能够正确转换,没有问题。解决办法:SELECT DECODE(0,NULL,'a',0) FROM DUAL
expr1和expr2可以是任何类型。如果2者类型不同,Oracle会进行隐式类型转换。
如果不能进行隐式转换,将会产生一个错误。隐式转换规则:
如果expr1是字符型,则Oracle在判断之前,将expr2转换为expr1的类型
如果expr1是数字类型,则会判断哪个参数具有最高的数字优先级,然后将另一个参数转化为该类型。本例中,字符型的数字优先级肯定最低,所以会将后面的字符串转换为数字类型,所以出错。
中的字符数据类型不同,所以报错!!
NVL(C1,'未知')
如果是将数字0转成未知就DECODE
decode(0,‘未知’)
--这样写
select nvl('0','未知') from dual
--这样写
select nvl('0','未知') from dual