首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >甲骨文解码与NVL

问甲骨文解码与NVL
EN

Stack Overflow用户
提问于 2014-11-10 15:27:44
回答 2查看 9.9K关注 0票数 5

我正在尝试分析一个由已故开发人员编写的现有Oracle查询。我对甲骨文不太熟悉,我对DECODE函数在Microfocus COBOL应用程序中的使用感到有点困惑( :BV-POS_YEAR是一个设置为一年的变量):

代码语言:javascript
复制
SELECT ...., DECODE(DELV_YEAR, NULL, :BV-POS_YEAR, DELV_YEAR), ....

我想弄清楚这和:

代码语言:javascript
复制
SELECT ...., NVL(DELV_YEAR, :BV-POS_YEAR), ....

我是否误解了DECODE或NVL函数?开发人员知道NVL功能,因为它在其他地方使用非常相同的select语句。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-10 15:34:03

NVL用指定的值替换NULL。

DECODE用所需的值替换任何指定的值,并且可以进行链接。您的用法是相同的,但是DECODE的使用范围要广得多。例如,您可以编写以下代码

代码语言:javascript
复制
SELECT supplier_name,
DECODE(supplier_id, 10000, 'IBM',
                    10001, 'Microsoft',
                    10002, 'Hewlett Packard',
                    'Gateway') result
FROM suppliers;

,这相当于这个伪代码。

代码语言:javascript
复制
if (supplier_id == 10000)
{
    SELECT 'IBM'
} else if (supplier_id == 10001)
{
    SELECT 'Microsoft'
} else if (supplier_id == 10002)
{
    SELECT 'Hewlet Packard'
} else
{
    SELECT 'Gateway'
}

编辑:NVL的性能和零替换解码的性能是由用户测量的,它看起来几乎是相等的。

我个人建议在您需要进行空替换时使用NVL,因为它更具表现力。

票数 12
EN

Stack Overflow用户

发布于 2021-08-05 08:28:47

让我们看看一些Oracle NVL函数示例,并探索如何在Oracle/PLSQL中使用NVL函数。

例如:

代码语言:javascript
复制
SELECT NVL(supplier_city, 'n/a')
FROM suppliers;

如果'n/a'字段包含空值,上面的SQL语句将返回supplier_city。否则,它将返回supplier_city值。

在Oracle/PLSQL中使用NVL函数的另一个例子是:

代码语言:javascript
复制
SELECT supplier_id,
NVL(supplier_desc, supplier_name)
FROM suppliers;

如果supplier_name包含空值,则此SQL语句将返回supplier_desc字段。否则,它将返回supplier_desc。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26847126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档