数字数据类型的 Oracle 等效 NVL

Posted

技术标签:

【中文标题】数字数据类型的 Oracle 等效 NVL【英文标题】:Oracle equivalent of NVL for number datatype 【发布时间】:2014-09-18 13:28:20 【问题描述】:

对于数字数据类型,NVL 的 Oracle 等价物是什么?

因为数据类型是 VARCHAR,所以这行得通:

 select nvl(enrol.OUAC_APPLNO, 'blank') Invalid_OUAC_APPLNO

但这不起作用,因为数据类型是 NUMBER:

 选择 nvl(enrol.ouac_type_id, 'blank') REGTYP

【问题讨论】:

这与NVL无关。你也不能select 42 from dual union select 'Arthur' from dual。一列的每一行都必须具有相同的数据类型。 【参考方案1】:

没有等价物,也没有 Oracle 函数会接受这个 (apart from DECODE() but don't do that);您将不得不将您的数字转换为字符:

select nvl(cast(enrol.OUAC_APPLNO as varchar2(10)), 'blank') 

您可能需要根据需要更改要转换为的字符数。

但是,我完全不知道您为什么要这样做。根据定义,NULL 意味着不存在。如果您想显示 blank 以表示不存在,那么您应该使用表示层而不是数据库来执行此操作。

【讨论】:

谢谢...我将查询结果导出为 Excel 并将电子表格提供给最终用户,我不想在 Excel 中操作数据。【参考方案2】:

它不会起作用,因为 oracle 希望每一行都应该是相同的类型,否则您无法在该列上运行函数,您已将 ouac_type_id 转换为 varchar,如下所示;

select nvl(cast(enrol.OUAC_APPLNO as varchar2(10)), 'blank') REGTYP

【讨论】:

这也是对的,但我似乎无法将两个答案标记为正确。【参考方案3】:

选择 nvl(TO_CHAR(enrol.OUAC_APPLNO), 'blank') REGTYP

【讨论】:

欢迎来到 Stack Overflow!请不要只用源代码回答。尝试对您的解决方案如何工作提供一个很好的描述。请参阅:How do I write a good answer?。谢谢

以上是关于数字数据类型的 Oracle 等效 NVL的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE nvl函数

在oracle数据库中nvl()是啥函数?

Oracle数据库—— 单行函数

数据库中的 NVL() 方法怎么用 ?

Oracle之约束

ORACLE NVL()和NVL2()函数使用