首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Oracle的nvl函数和nvl2函数

2023-11-12 来源:华拓网

一、基本语法

介绍一下oracle的nvl函数和nvl2函数。

nvl函数nvl函数基本语法为nvl(E1,E2),意思是E1为null就返回E2,不为null就返回E1。

nvl2函数nvl2函数的是nvl函数的拓展,基本语法为nvl2(E1,E2,E3),意思是E1为null,就返回E3,不为null就返回E2。

二、业务场景

nvl()函数比较常用的是这样的nvl(E1,0),意思是E1参数查询到为null的情况,就返回0,不为null就返回E1,常用于非空校验。

nvl2()函数也讲一个业务场景。今天用列转行函数vm_concat查询的时候,遇到一个问题,对vm_concat不熟悉的可以参考我的另外一篇博客:https://blog.csdn.net/u014427391/article/details/84981114

我用vm_concat查询,假如b参数为空的情况就会出现“a()”的参数,我想做的是b参数为空的情况,直接返回“a”参数,b参数不为空的情况才返回“a(b)”类型的数据,比如可以是用户名a(账号b)这样显示。原来SQL是这样的。

select to_char(nvl2(b,vm_concat(a||‘(‘||b||‘)‘), ‘‘) from A group by id

改写SQL,通过nvl2函数实现改写:

select to_char(wm_concat(nvl2(b, a || ‘(‘ || b || ‘)‘, a))) as 返回参数

Oracle的nvl函数和nvl2函数

标签:rac   转行   code   查询   类型   校验   https   tps   一个   

小编还为您整理了以下内容,可能对您也有帮助:

oracle的nvl和nvl2是什么函数,两者区别是什么呢

oracle的NVL函数的功能室如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。

NVL(E1, E2)的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身。但此函数有一定局限,所以就有了NVL2函数。

NVL2函数的格式如下:NVL2(expr1,expr2, expr3)

含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。

NVL2函数:Oracle/PLSQL中的一个函数,NVL2(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,若E1不为null,则返回E2。

扩展资料:

NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回响应的列名或表达式,主要用于对数据列上的空值进行处理,语法格式如:NVL( string1, replace_with)

如果第一个参数的值为空值,则返回第二个参数的值,否则返回第一个参数的值。如果两个参数的值都为空值,则返回空值。

第一个参数和第二个参数可以是任何类型的数据,但两个参数的数据类型必须相同(或能够由Oracle隐式转换为相同的类型)。

参考资料来源:百度百科--nvl函数

oracle里nvl,to_char,decode这些函数怎么用啊?

 
Oracle提供了一些逻辑判断函数,这些函数可以在查询中使用。
1.
nvl
:针对空值进行测试
   
函数原型为:NVL(testValue,SubstituteValue)
   
常见的用法是 
Select max(score)
From
SC
Where
Name=‘Jerry’
   
有时max(score)为空,也就是说Jerry并没有考试记录,这时我们用"No
Record"标注一下:
   
Select
NVL(max(score),"No
Record")
From
SC;
 
   
还有一个NVL2函数跟其相似,函数原型为:
NVL(testValue,SubValue1,SubValue2)
NVL2函数实现的是若testValue为NULL,返回SubValue1,否则返回SubValue2。
2.Decode函数
 
Decode函数的原型为:
Decode(testValue,
if1,
then1,
if2,then2.....else).
  
针对testValue进行测试,若testValue等于if1则返回then1,若testValue等于if2则返回then2,....若都没有返回,刚返回else. 示例如下:
若我们用Decode可以这样实现:
SELECT
class,
course,
       DECODE
(student,
               'A',
'Anco',
               'B',
'Bily',
               'C',
'Candy',
               'D',
'Davi',
               'E',
'Eve',
               'F',
'Fion'
              )
AS
en_name
  FROM
studentinfo
3.
to_char函数功能,就是将数值型或者日期型转化为字符型,转换过程中可以进行格式化处理,函数原型较多,示例如下:
 
 

oracle里nvl,to_char,decode这些函数怎么用啊?

 
Oracle提供了一些逻辑判断函数,这些函数可以在查询中使用。
1.
nvl
:针对空值进行测试
   
函数原型为:NVL(testValue,SubstituteValue)
   
常见的用法是 
Select max(score)
From
SC
Where
Name=‘Jerry’
   
有时max(score)为空,也就是说Jerry并没有考试记录,这时我们用"No
Record"标注一下:
   
Select
NVL(max(score),"No
Record")
From
SC;
 
   
还有一个NVL2函数跟其相似,函数原型为:
NVL(testValue,SubValue1,SubValue2)
NVL2函数实现的是若testValue为NULL,返回SubValue1,否则返回SubValue2。
2.Decode函数
 
Decode函数的原型为:
Decode(testValue,
if1,
then1,
if2,then2.....else).
  
针对testValue进行测试,若testValue等于if1则返回then1,若testValue等于if2则返回then2,....若都没有返回,刚返回else. 示例如下:
若我们用Decode可以这样实现:
SELECT
class,
course,
       DECODE
(student,
               'A',
'Anco',
               'B',
'Bily',
               'C',
'Candy',
               'D',
'Davi',
               'E',
'Eve',
               'F',
'Fion'
              )
AS
en_name
  FROM
studentinfo
3.
to_char函数功能,就是将数值型或者日期型转化为字符型,转换过程中可以进行格式化处理,函数原型较多,示例如下:
 
 

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

1、nvl(exp1,exp2);作用是如果表达式exp1为空则返回exp2表达式,如果exp1表达式不为空则返回exp1表达式。

2、但nvl函数有一个前提条件是两个参数的数据类型要一样,不然会报错误。如下图由于comm是数字类型,所以第二个参数不能是其它类型。

3、nvl2函数语法nvl2(exp1,exp2,exp3);这个函数需要有三个参数。它的使用是如果exp1为空则返回exp3,如果exp1不为空则返回exp2。

4、但有一点需要注意的是nvl2函数中exp2与exp3数据类型要一样,不然也会报错。

5、但nvl2函数另外一点也需要注意,就是当exp2与exp3两个参数数据类型不一样的时候,exp3参数数据类型会转换为exp2数据类型,但前提是可以进行转换才可以,如果不能进行转换是会报错误的。

6、nullif函数语法,nullif(exp1,exp2);它的作用是如果exp1与exp2两个参数的值相等则返回空,如果不相等则返回exp1,同样两个参数的数据类型也要一样。

Oracle中nvl和nvl2这两个函数的区别

1.NVL ( )语法:nvl(expr1,expr2)

如果 expr1 是 null 值,则 nvl 函数返回 expr2 ,否则就返回 expr1 。

说明:参数 expr1、expr2 可以是任何数据类型,但应该保持相同。若两者数据类型不一致,则Oracle数据库会隐式的转换其中一个的数据类型使其保持和另一个一致,若无法转换则会返回错误。隐式转换的实施规则如下:

(1)若 expr1 是字符数据,则Oracle数据库在比较之前就会把 expr2 转换成 expr1 的数据类型并且返回 VARCHAR2 数据类型到 expr1 的字符集。

(2) 若 expr1 是数值型,则Oracle数据库决定哪个参数具有最高数值优先级,并把另一个参数的数据类型隐式转换成这种数据类型,并返回这种数据类型的数据。

实例:返回员工姓名和奖金,若该员工没有奖金则返回 Not Applicable

SELECT last_name, NVL(TO_CHAR(commission_pct), 'Not Applicable') "COMMISSION"

FROM employees

WHERE last_name LIKE 'B%'

ORDER BY last_name;

ORACLE NVL 和 NVL2 函数的使用

2.NVL2 ( )

语法:nvl2(expr1,expr2,expr3)

如果 expr1 不是 null 值,则 nvl 函数返回 expr2 ,否则就返回 expr3 。参数可以返回任何数据类型的值,但是 expr2 和 expr3 不能是 LONG 型的数据类型。

说明:若 expr2 和 expr3 的数据类型不同:

(1)若 expr2 是字符数据,则Oracle数据库在比较之前就会把 expr3 转换成 expr2 的数据类型除非 expr3 是null。在 这种情况下,隐式数据转换是不必要的。Oracle数据库返回 VARCHAR2 数据类型到 expr2 的字符集。

(2) 若 expr2 是数值型,则Oracle数据库决定哪个参数具有最高数值优先级,并把另一个参数的数据类型隐式转换成这种数据类型,并返回这种数据类型的数据。

实例:返回员工收入,看员工收入(income)是否由工资(salary)加奖金(commission)组成,这取决于commission_pct列是否为null

SELECT last_name, salary, NVL2(commission_pct, salary + (salary * commission_pct), salary) income FROM employees

WHERE last_name like 'B%'

ORDER BY last_name;

ORACLE NVL 和 NVL2 函数的使用

显示全文