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

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

 

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。

2Decode函数

 

Decode函数的原型为:

Decode(testValue,

if1,

then1,

if2,then2else)

  

针对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函数功能,就是将数值型或者日期型转化为字符型,转换过程中可以进行格式化处理,函数原型较多,示例如下:

 

 

sum(sal) over (partition by deptno order by deptno desc,sal desc)意思是按照deptno分区对sal“对应deptno和sal连续”求和,而over函数中的order by是指在在同一deptno分区内进行排序 “连续求和”,同一分区内的deptno肯定相同,所以没有意义,而同一分区内的sal倒序“连续求和”,意味着本条记录的求和结果等于上条记录的求和结果+本条记录员工的sal,同一deptno中员工的sal是倒序的,而不是整个结果按照sal倒序,也不是对求和后的sal倒序排列。

注意连续求和的结果。

sum(sal) over (order by deptno desc,sal desc) 不按deptno分区,不按部门“连续”求总和

create function is_date(v_in_date varchar2) return varchar2 is

v_result varchar2(20);

v_date date;

begin

v_date:=to_date(v_in_date ,'YYYY-MM-DD hh24:mi:ss');

return 'true';

exception

WHEN NO_DATA_FOUND THEN return 'false';

when others then return 'false';

end is_date;

连续求和分析函数 sum(…) over(…)

NC示例:

1、select bdcode,sum(1) over(order by bdcode) aa from bd_bdinfo 

示例

原表信息

规则

sum(…) over( ),对所有行求和。

sum(…) over( order by … ), 连续求和。

sum(…) over( partition by… ),同组内所行求和。

sum(…) over( partition by… order by … ),同第1点中的排序求和原理,只是范围限制在组内。

扩展资料

oracle 数据库的特点

1、完整的数据管理功能:

1)数据的大量性

2)数据的保存的持久性

3)数据的共享性

4)数据的可靠性

2、完备关系的产品:

1)信息准则---关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;

2)保证访问的准则

3)视图更新准则---只要形成视图的表中的数据变化了,相应的视图中的数据同时变化

4)数据物理性和逻辑性独立准则

3、分布式处理功能:

ORACLE数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个ORACLE分布式数据库由oraclerdbms、sqlNet、SQLCONNECT和其他非ORACLE的关系型产品构成。

-Oracle数据库

声明

型num_table表是多少;

v_numlistnum_table:=num_table(空,空,空,空,空);

开始

v_numlist(1):=1001;

v_numlist(2):=1002;

dbms_output。put_line(to_char(v_numlist。--计数));5

v_numlistdelete;

dbms_output。put_line(to_char(v_numlist。--计数));0

v_numlist延长(2);

v_numlist(1):=10018;

v_numlist(2):=10028;

dbms_output。put_line(to_char(v_numlist。--计数));2

dbms_output。put_line(to_char(v_numlist(1)));--10018

dbms_output。put_line(to_char(v_numlist(2)));--10028

v_numlist删除(2);

dbms_output。put_line(to_char(v_numlist。--计数));1

dbms_output。put_line(to_char(v_numlist(1)));--10018

v_numlist延长(2);

dbms_output。put_line(to_char(v_numlist。--计数));3

v_numlist(2):=810028;

v_numlist(3):=910028;

dbms_output。put_line(to_char(v_numlist计数。));--3?

dbms_output。put_line(to_char(v_numlist(1)));--10018

dbms_output。put_line(to_char(v_numlist(2)));--810028

dbms_output。put_line(to_char(v_numlist(3)));--910028

dbms_output。put_line(to_char(v_numlist计数。));3?

v_numlist删除(2 , 3);

dbms_output。put_line(to_char(v_numlist计数。));1?

dbms_output。put_line(to_char(v_numlist(1)));--10018

——dbms_output。put_line(to_char(v_numlist(2)));

——dbms_output。put_line(to_char(v_numlist(3)));

终点。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11671748.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存