请问nvl函数不能显示字符怎么处理?

xhzlhc 2011-12-26 11:40:23
比如select nvl(0,'未知')from dual
报错:ORA-01722: 无效数字
select nvl(0,'888')from dual 就ok 不知道有没有个函数能判断空值并返回一个默认值(要支持字符的)

不要说自己写一个函数,这个毕竟没有oracle带的方便,要用于移植的

多谢大家了
...全文
297 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniuswjt 2011-12-28
  • 打赏
  • 举报
回复

--这样写
select nvl('0','未知') from dual
geniuswjt 2011-12-28
  • 打赏
  • 举报
回复

--这样写
select nvl('0','未知') from dual
xhzlhc 2011-12-28
  • 打赏
  • 举报
回复
马白了 谢谢大家了

呵呵深夜不能入眠 起来学习 hoho
sh65489 2011-12-27
  • 打赏
  • 举报
回复
0是数值型,当然不能转
NVL(C1,'未知')
如果是将数字0转成未知就DECODE
decode(0,‘未知’)
土匪八号 2011-12-27
  • 打赏
  • 举报
回复
用DECODE 吧
  • 打赏
  • 举报
回复
DECODE函数应该可以完成转换
我心飞翔 2011-12-27
  • 打赏
  • 举报
回复
NVL(expr1, expr2).
expr1和expr2可以是任何类型。如果2者类型不同,Oracle会进行隐式类型转换。
如果不能进行隐式转换,将会产生一个错误。

隐式转换规则:
如果expr1是字符型,则Oracle在判断之前,将expr2转换为expr1的类型
如果expr1是数字类型,则会判断哪个参数具有最高的数字优先级,然后将另一个参数转化为该类型。

本例中,字符型的数字优先级肯定最低,所以会将后面的字符串转换为数字类型,所以出错。
hudingchen 2011-12-27
  • 打赏
  • 举报
回复
问题的关键:
使用nlv(exp1,exp2),当exp1和exp2类型不一致的时候,会进行类型转换。
你的例子中,
1.使用nvl(0,'未知'),oracle会将'未知'转换成数字,所以报ORA-01722: 无效数字;
2.使用nvl(0,'888'),会将'888'转换数字,能够正确转换,没有问题。

解决办法:

SELECT DECODE(0,NULL,'a',0) FROM DUAL


我心飞翔 2011-12-27
  • 打赏
  • 举报
回复
实测结果,


请注意NULL和0的区别。
勿勿 2011-12-27
  • 打赏
  • 举报
回复
select nvl(0,'未知')from dual
中的字符数据类型不同,所以报错!!
一、选择行 1. 简单的SELECT 语句 SELECT 字段名1 [AS] '字段名1 解释' FROM table; 2. 处理NULL NVL函数可把NULL转换成其它类型的符号 编程技巧: NVL函数在多条件模糊查询的时候比较有用 NVL函数可返回多种数据类型: 返回日期 NVL(start_date,'2002-02-01') 返回字符串 NVL(title,'no title') 返回数字 NVL(salary,1000) 3. 使用SQL*PLUS(1) SQL> desc table; 显示表结构 SQL> select * from tab; 查看用户下所有的表 SQL> set pause on; 可以使大量结果集在用户按“Enter”(回车)后翻页 SQL> set pagesize 100; 设定SQL语句返回结果集一页的行数100, 默认值是14 SQL> set linesize 100; 设定SQL语句返回结果集一行的宽度100, 默认值是80 4. SQL*PLUS里规定字段的显示格式 规定数字的显示格式 SQL>column 字段名 format 99999999999; SQL>column 字段名 format 999,999,999,999; SQL>column 字段名 format a数字 [word_wrapped]; 规定long字符的显示宽度 SQL>set long 200; 规定字段名的显示内容 SQL> column 字段名 heading '字段名显示内容'; SQL> set heading off; 查询时不显示字段名称 规定字段的对齐方向 SQL> column 字段名 justify [left | right | center]; 清除字段的格式 SQL> column 字段名 clear; 5. SQL*PLUS里规定字段的显示格式例子 SQL> column last_name heading 'Employee|Name' format a15; SQL> column salary justify right format $99,999.99; SQL> column start_date format a10 null 'Not Hired'; 说明:如果start_date为null, 显示字符串'Not Hired'

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧