Oracle中的NVL()、NVL2()、NULLIF()、Coalesce()函数

时间:2021-02-25 11:52:28

大家先来看看下面这道简单的题目:

1.  TEST表包含两个列,TESTCOL定义为数据类型NUMBER(10),TESTCOL_2定义为数据类型VARCHAR2(10)。在Oracle中发出下列语句:insert into test(testcol,testcol_2) values (null, ‘FRANCIS’)

A.Oracle返回结果0                     B.Oracle返回结果EMPTY

C.Oracle返回结果NULL            D.Oracle返回错误结果

正确答案是:D

对NVL()这个简单的函数没能注意其细节,现将NVL()、NVL2()、NULLIF()、Coalesce()函数的用法总结如下:

在学习以上函数之前我们必须明白什么是Oracle中的空值null

1.NVL函数

   NVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致

2.NVL2函数

   NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型。

3.NULLIF函数

   NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1

4. Coalesce函数

   Coalese函数的作用是的NVL的函数有点相似,其优势是有更多的选项。

   格式如下:

   Coalesce(expr1, expr2, expr3….. exprn)

   表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。

   返回表达式中第一个非空表达式,如有以下语句:  SELECT COALESCE(NULL,NULL,3,4,5) FROM dual   其返回结果为:3

   如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。  COALESCE(expression1,...n) 与此 CASE 函数等价:

   这个函数实际上是NVL的循环使用,在此就不举例子了。