Oracle的分析函数(解析函数)说明

来源:互联网 发布:浙江省高等教育网络 编辑:程序博客网 时间:2024/05/29 18:11

一。解析函数的说明

分析函数是甲骨文8中引入的一个概念,为我们分析数据提供了一种简单高效的处理方式。

 

官方对分析函数的说明如下:

分析功能计算,总价值基础上的一组行。它们的不同之fromaggregate函数,因为它们为每个组返回多行。groupof行被称为一个窗口,并定义:费analytic_clause。对于每一行,行是一个滑动窗口defined.The窗口中确定用于执行计算欢喜当前行的行的范围。一个物理编号为rowsor的逻辑,如时间间隔可以基于窗口大小。

分析函数是最后一组,除了最终夺取ORDER BY子句在查询中执行的操作。所有的连接和所有WHERE,GROUP BY,和HAVING子句前完成分析功能areprocessed的。因此,分析功能可以出现,只有在选择listor的ORDER BY子句。

常用的分析函数计算累计,移动,居中,andreporting聚集。

 

来自:解析函数

http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions004.htm#SQLRF06174

 

功能)。区别是在调用分析函数时,后面加上了开窗子句超过()。

聚合函数是对一个查询结果中的每个分组进行运算,并且对每个分组产生一个运算结果。分析函数也是对一个查询结果中的每个分组进行运算,但每个分组对应的结果可以有多个。产生这个不同的原因是分析函数中有一个窗口的概念,一个窗口对应于一个分组中的若干行,分析函数每次对一个窗口进行运算。运算时窗口在查询结果或分组中从顶到底移动,对每一行数据生成一个窗口。

 

甲骨文聚合函数(聚合函数)说明

http://blog.csdn.net/tianlesoftware/article/details/7057249

 


        ):将查询结果分为不同的组,功能类似于组


analyticfunctions常用在数据仓库环境。在列表中ofanalytic的功能如下,功能一个星号(*)allowthe完整的语法,包括windowing_clause。

--分析函数通常在数据仓库环境下使用,下表列出了所有的分析函数,其中加星号的支持全部语法,包括开窗选项。


(线性回归)函数  * ROW_NUMBER STDDEV  * STDDEV_POP  * STDDEV_SAMP  * SUM  * VAR_POP  * VAR_SAMP VARIANCE






























 

 

二。解析函数使用示例

下面主要介绍一下以下几个函数的使用方法

1。Over()函数开窗函数

2。NVL()函数
3。ROLLUP,CUBE自动汇总函数
4。等级,DENSE_RANK:ROW_NUMBER函数
5。落后,铅函数
。SUM,AVG,COUNT,MAX函数
7。RATIO_TO_REPORT报表处理函数
。首先,最后,FIRST_VALUE,LAST_VALUE取基数的分析函数

9。最伟大的,最函数

10。TRUNC,圆形,解码,SUBSTR函数

 

2.1在()开窗函数

Over()函数开窗函数是甲骨文的分析函数,其语法如下:

函数名([参数])以上(分区子句] [排序子句[滑动窗口子句])


分区子句类似于聚组函数所需要的组 最后一个)。

 


工资)按照薪水排序进行累计,排序依据是个默认的开窗函数
以上(DEPTNO分区)按照部门分区
以上(为了薪水范围在50前和150 50前和150以下的薪金行之间)每行对应的数据窗口是之前50行,之后150行以上(按工资行之间unboundedpreceding和无限的以下)每行对应的数据窗口是从Dai-ichi行到最后一行,等效以上(按工资范围之间unboundedpreceding和无限的以下)





 

2.2 NVL()函数

NVL(EXP1,EXP2),函数返回EXP1和EXP2中第一个不为空的值。

 

如果EXP1为空则返回EXP2,否则返回EXP1。

 

注意:如果exp1不是字符串,那么返回的数据类型和exp1的数据类型相同,否则返回的数据类型为varchar2型。

 

SQL> SELECT NVL(“这不是空的',7)首先,NVL(NULL,”我的甲骨文)Secondfrom双;

 第一第二

-------------------------------

这不是空的My Oracle

 

2.3  自动汇总函数汇总,多维数据集

汇总:表示的意思是:除了分组的功能外,还进行累加的的,多了一个汇总。

如果是的GROUP BYROLLUP(A,B,C)的话,GROUP BY顺序

(A,B,C)

(A,B)

(A)

最后对全表进行GROUP BY操作。

 

立方提供了按照多字段汇总的功能。

如果是GROUP BY CUBE(A,B,C),GROUP BY顺序

(A,B,C)

(A,B)

(A,C)

(A)

(B,C)

(B)

(C)

最后对全表进行GROUP BY操作。

 

示例:

[SQL] 查看纯副本
  1. CREATE  TABLE  studentscore中  
  2. (  
  3.  student_name VARCHAR2(20),  
  4.  主题VARCHAR2(20),  
  5.  评分数  
  6. )  
  7.    
  8.    
  9. INSERT  INTO  studentscore  VALUES 'WBQ' '英语' ,90);  
  10. INSERT  INTO  studentscore  VALUES 'WBQ' '数学' ,95);  
  11. INSERT  INTO  studentscore  VALUES 'WBQ' '中国' ,88);  
  12. INSERT  INTO  studentscore  CZH' '英语' ,80);  
  13. INSERT  INTO  studentscore  VALUES 'CZH' '数学' ,90);  
  14. INSERT  INTO  studentscore的  VALUES CZH“ ,“历史” ,92);  
  15. INSERT  INTO的 studentscore  VALUES 'CB' '政治' ,70);  
  16. INSERT  INTO  studentscore  VALUES 'CB' '历史' ,75);  
  17. INSERT  INTO的 studentscore  VALUES 'LDH' '政治' ,80);  
  18. INSERT  INTO  studentscore  VALUES 'LDH' '中国“ ,90);  
  19. INSERT  INTO  studentscore  VALUES 'LDH'的'历史' ,95);  
  20.    
  21. 选择 *   studentscore;  
  22.    
  23. / * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /  
  24. 选择  student_name,科目,  SUM  (得分)  
  25.      studentscore  
  26. GROUP  BY  CUBE  (student_name中,受试者)  
  27. ORDER  BY  1;  
  28.    
  29. <跨越式= “颜色:#FF0000” >等同于以下标准SQL </ SPAN>  
  30.    
  31. / * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /  
  32. 选择  NULL ,科目,  SUM  (得分)  
  33.      studentscore  
  34. GROUP  BY  的主题  
  35. UNION  
  36. 选择  student_name,  NULL ,  SUM  (得分)  
  37.      studentscore  
  38. GROUP  BY  student_name  
  39. UNION  
  40. SELECT  NULL ,  NULL ,  SUM  (得分)  
  41.   studentscore  
  42. UNION  
  43. 选择  student_name,科目,  SUM  (得分)  
  44.      studentscore  
  45. GROUP  BY  student_name中,受试者的  
  46.    
  47.    
  48. / * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /  
  49. 选择  student_name,科目,  SUM  (得分)  
  50.      studentscore  
  51. GROUP  BY  ROLLUP  (student_name科目);  
  52.    
  53.    
  54. / * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /  
  55. 选择  student_name,  NULL ,  SUM  (得分)  
  56.      studentscore  
  57. GROUP  BY  student_name  
  58. UNION  
  59. SELECT  NULL ,  NULL ,  SUM  (得分)  
  60.   studentscore  
  61. UNION  
  62. 选择  student_name,科目,  SUM  (得分)  
  63.      studentscore  
  64. GROUP  BY  student_name中,受试者的  
  65.    
  66.    
  67.    
  68.    
  69. / * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /  
  70. 选择  分组 (student_name),  GROUPING  (主题),student_name,主题,  
  71.          SUM  (得分)  
  72.      studentscore  
  73. GROUP  BY  CUBE  (student_name中,受试者)  
  74. ORDER  BY  1,2;  
  75.    
  76.    
  77.    
  78. / * Formattedon 2009/11/08 20点36分(格式化加v4.8.8)* /  
  79. 选择  分组 (student_name),  GROUPING  (主题),student_name,主题,  
  80.          SUM  (得分)  
  81.      studentscore  
  82. GROUP  BY  ROLLUP  (student_name中,受试者)  
  83. ORDER  BY  1,2;  
  84.    
  85.    
  86.    
  87. / * Formattedon 2009/11/08 20点36分(格式化加v4.8.8)* /  
  88. SELECT   GROUPING_ID(student_name,科目),student_name,主题,  
  89.          SUM  (得分)  
  90.      studentscore  
  91. GROUP  BY  CUBE  (student_name中,受试者)  
  92. ORDER  BY  1;  
  93.    
  94.    
  95.    
  96. / * Formattedon 2009/11/08 20点36分(格式化加v4.8.8)* /  
  97. SELECT   GROUPING_ID(student_name,科目),student_name,主题,  
  98.          SUM  (得分)  
  99.      studentscore  
  100. GROUP  BY  ROLLUP  (student_name中,受试者)  
  101. ORDER  BY  1;  
  102.    
  103.    
  104. / * Formattedon 2009/11/08 20点36分(格式化加v4.8.8)* /  
  105. 选择  分组 (student_name),  GROUPING  (课题),  
  106.          CASE  
  107.              GROUPING  (student_name)= 0  
  108.                   GROUPING  (主题)= 1  
  109.                THEN  '学生成绩合计“  
  110.              GROUPING  (student_name)= 1  
  111.                   GROUPING  (主题)= 0  
  112.                THEN  '课目成绩合计'  
  113.              GROUPING  (student_name)= 1  
  114.                   GROUPING  (主题)= 1  
  115.                 “总计”  
  116.             ELSE  '  
  117.          END  总结,  
  118.          student_name,科目,  SUM  (得分)  
  119.      studentscore  
  120. GROUP  BY  CUBE  (student_name中,受试者)  
  121. ORDER  BY  1,2;  

2.4级,DENSE_RANK,ROW_NUMBER函数

Rank,Dense_rank,Row_number函数为每条记录产生一个从1开始至N的自然数,N的值可能小于等于记录的总数。这3个函数的唯一区别在于当碰到相同数据时的排名策略。

 (1)ROW_NUMBER:

Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。

 (2)DENSE_RANK:

Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。

 (3)等级:

Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。

 

示例:

[SQL] 查看纯副本
  1. / *格式化   2009/11/08 20点48(格式Plusv4.8.8)* /  
  2. SELECT  ENAME,DEPTNO,SAL,  
  3.        RANK()OVER(PARTITION  BY  DEPTNO  ORDER  BY  SAL  DESC )  “RANK”
  4.        DENSE_RANK()OVER(PARTITION  BY  DEPTNO  ORDER  BY  SAL  DESC )  “DENSE_RANK”的,  
  5.        ROW_NUMBER()OVER(PARTITION  BY  DEPTNO  ORDER  BY  SAL  DESC )  “ROW_NUMBER”  
  6.   SCOTT.EMP  

 

ENAME

DEPTNO

SAL

DENSE_RANK

ROW_NUMBER

KING

10

5000

1

1

1

CLARK

10

2450

2

2

2

MILLER

10

1300

3

3

3

SCOTT

20

3000

1

1

1

福特

20

3000

1

1

2

JONES

20

2975

3

2

3

ADAMS

20

1100

4

3

4

SMITH

20

800

5

4

5

BLAKE

30

2850

1

1

1

ALLEN

30

1600

2

2

2

TURNER

30

1500

3

3

3

MARTIN

30

1250

4

4

4

WARD

30

1250

4

4

5

JAMES

30

950

6

5

6

 

2.5滞后,导致函数

的滞后(表达,<偏移量>,<DEFAULT>)函数可以访问组内当前行之前的行,

铅(表达,<偏移量>,<DEFAULT>)

 

注意:这2个函数必须指定ORDER BY字句。

[SQL] 查看纯副本
  1. / * Formattedon 2009/11/08 21:09(格式化加v4.8.8)* /  
  2. SELECT  ENAME,DEPTNO,SAL,LAG(SAL)OVER(ORDER  BY  SAL)LAG,  
  3.        LEAD(SAL)OVER(ORDER  BY  SAL)LEAD  
  4.    SCOTT.EMP;  

 

ENAME

DEPTNO

SAL

LAG

SMITH

20

800

 

950

JAMES

30

950

800

1100

ADAMS

20

1100

950

1250

WARD

30

1250

1100

1250

MARTIN

30

1250

1250

1300

MILLER

10

1300

1250

1500

TURNER

30

1500

1300

1600

ALLEN

30

1600

1500

2450

CLARK

10

2450

1600

2850

BLAKE

30

2850

2450

2975

JONES

20

2975

2850

3000

SCOTT

20

3000

2975

3000

福特

20

3000

3000

5000

KING

10

5000

3000

 

 

[SQL] 查看纯副本
  1. / * Formattedon 2009/11/08 21:11(格式化加v4.8.8)* /  
  2. SELECT  ENAME,DEPTNO,SAL,LAG(SAL,2,0)OVER(ORDER  BY  SAL)LAG,  
  3.        的LEAD(SAL,2,SAL)OVER(ORDER  BY  SAL)LEAD  
  4.    SCOTT.EMP;  

 

ENAME

DEPTNO

SAL

LAG

SMITH

20

800

0

1100

JAMES

30

950

0

1250

ADAMS

20

1100

800

1250

WARD

30

1250

950

1300

MARTIN

30

1250

1100

1500

MILLER

10

1300

1250

1600

TURNER

30

1500

1250

2450

ALLEN

30

1600

1300

2850

CLARK

10

2450

1500

2975

BLAKE

30

2850

1600

3000

JONES

20

2975

2450

3000

SCOTT

20

3000

2850

5000

福特

20

3000

2975

3000

KING

10

5000

3000

5000

 

 

2.6 SUM,AVG,COUNT,MAX函数

2.6.1 SUM函数

 

[sql] view plaincopy
  1. / * Formattedon 2009/11/08 21:25(格式化加v4.8.8)* /  
  2. 选择 SUM  (SAL)  的“总和”。  
  3.    SCOTT.EMP;  
  4.   
  5. / * Formattedon 2009/11/08 21:27(格式化加v4.8.8)* /  
  6. SELECT  ENAME,DEPTNO,SAL,  
  7.        SUM  (SAL)OVER(PARTITION  BY  DEPTNO  ORDER  BY  SAL范围UNBOUNDED PRECEDING)  “SUM”  
  8.    SCOTT.EMP;  


 

ENAME

DEPTNO

SAL

SUM

MILLER

10

1300

1300

CLARK

10

2450

3750

KING

10

5000

8750

SMITH

20

800

800

ADAMS

20

1100

1900

JONES

20

2975

4875

SCOTT

20

3000

10,875

福特

20

3000

10,875

JAMES

30

950

950

MARTIN

30

1250

3450

WARD

30

1250

3450

TURNER

30

1500

4950

ALLEN

30

1600

6550

BLAKE

30

2850

9400

 

2.6.2 AVG函数

 

[SQL] 查看纯副本
  1. / * Formattedon 2009/11/08 21:29(格式化加v4.8.8)* /  
  2. 选择 AVG  (SAL)  “AVG”  
  3.    SCOTT.EMP;  
  4.    
  5. / * Formattedon 2009/11/08 21:31(格式化加v4.8.8)* /  
  6. SELECT  ENAME,DEPTNO,SAL,HIREDATE,  
  7.        ROUND((AVG  (SAL)OVER(PARTITION  BY  DEPTNO  ORDER  BY  HIREDATE  
  8.        ROWS   1以上   1以下)),2)的  “c_mavg”  
  9.    SCOTT.EMP;  

 

ROUND()取小数点后面2位

ENAME DEPTNO SAL HIREDATE c_mavg

,克拉克10 2450 1981 -6-9 3725

,景10 5000 1981 -11-17 2916.67

,苗10 1300 1982 -1-23 3150

史密斯20 800 1980 -12-17 1887.5

道琼斯20 2975 1981 -4-2 2258.33

福特20 3000 1981 -12-3 2991.67

SCOTT 20 3000 1987 -4-19 2366.67

ADAMS 20 1100 1987 -5-23 2050

ALLEN 30 1600 1981 -2-20 1425

WARD 30 1250 1981 -2-22 1900

BLAKE 30 2850 1981 -5-1 1866.67

TURNER 30 1500 1981 -9-8 1866.67

MARTIN 30 1250 1981 -9-28 1233.33

JAMES 30 950 1981 -12-3 1100

 

2.6.3计数函数

[SQL] 查看纯副本
  1. / * Formattedon 2009/11/09十六时50分(格式+ v4.8.8)* /  
  2. SELECT  COUNT  (*) “ 总”  
  3.    SCOTT.EMP;  
  4.    
  5. / * Formattedon 2009/11/10 10:42(格式化加v4.8.8)* /  
  6. SELECT  ENAME,EMPNO,DEPTNO,SAL,  
  7.        COUNT  (SAL)OVER(PARTITION  BY  DEPTNO  ORDER  BY  SAL  
  8. 范围   50货品   150 FOLLOWING)  
  9. 作为 mov_count    SCOTT.EMP;  


 

ENAME

EMPNO

DEPTNO

SAL

MOV_COUNT

MILLER

7934

10

1300

1

CLARK

7782

10

2450

1

KING

7839

10

5000

1

SMITH

7369

20

800

1

ADAMS

7876

20

1100

1

JONES

7566

20

2975

3

SCOTT

7788

20

3000

3

福特

7902

20

3000

3

JAMES

7900

30

950

1

MARTIN

7654

30

1250

2

WARD

7521

30

1250

2

TURNER

7844

30

1500

2

ALLEN

7499

30

1600

1

BLAKE

7698

30

2850

1

 

 

[SQL] 查看纯副本
  1.   

2.6.4最大函数

 

[SQL] 查看纯副本
  1. / * Formattedon 2009/11/10 14:45(格式化加v4.8.8)* /  
  2. SELECT  MAX  (SAL)  MAX  
  3.   SCOTT.EMP;  
  4.   
  5. / * Formattedon 2009/11/10 14:46(格式化加v4.8.8)* /  
  6. SELECT  ENAME,SAL,DEPTNO,  MAX  (SAL)OVER(PARTITION  BY  DEPTNO)   MAX  
  7.   SCOTT.EMP;  
  8.    
  9. / * Formattedon 2009/11/10 14点47分(格式化此外v4.8.8),* /  
  10. SELECT  ENAME,SAL,DEPTNO  
  11.  FROM  (SELECT  ENAME,SAL,DEPTNO,  MAX  (SAL)OVER(PARTITION  BY  DEPTNO)sal_max  
  12.            SCOTT.EMP)  
  13.  其中, SAL = sal_max;  

 

ENAME

SAL

DEPTNO

KING

5000

10

福特

3000

20

SCOTT

3000

20

BLAKE

2850

30

 

 

2.7.ratio_to_report报表处理函数

除报告详细数据外,许多报告中还包括每行总数的百分比。例如,每名客户的订单相对于总订单的百分比,或每位销售代表的销售额相对于总销售额的百分比。

传统上,Oracle计算百分比的方法是在总计报告的子查询中使用SUM函数总计报告,然后把那个结果放到细节表中相除来计算百分比。

分析函数RATIO_TO_REPORT 则得到的结果也为0。

 

开窗条件query_partition_clause决定被除数的值,如果用户忽略了这个条件,则计算查询结果中所有记录的汇总值。

 

也就是说这个函数不能循环使用。但我们可以使用其他普通函数作为这个分析函数的查询结果。

 

RATIO_TO_REPORT解析函数使得这种类型的查询更容易编码。它的格式如下:

RATIO_TO_REPORT(表达式)OVER(query_partition_clause)

 

[SQL] 查看纯副本
  1. / * FORMATTEDON 2009/11/10 20:24(PLUS V4.8.8 FORMATTER)* /  
  2. SELECT  ENAME,SAL,DEPTNO,RATIO_TO_REPORT(SAL)OVER()  AS  RR  
  3.   SCOTT.EMP  
  4.  WHERE  DEPTNO = 10;  


 

ENAME

SAL

DEPTNO

RR

CLARK

2450

10

0.28

KING

5000

10

0.571428571428571

MILLER

1300

10

0.148571428571429

 

[SQL] 查看纯副本
  1. / * FORMATTEDON 2009/11/10 20:36(PLUS V4.8.8 FORMATTER)* /  
  2. SELECT  ENAME,SAL,DEPTNO,  
  3.        中RATIO_TO_REPORT(SAL)OVER(PARTITION  BY  DEPTNO)AREA_PCT  
  4.   SCOTT.EMP;  


ENAME

SAL

DEPTNO

AREA_PCT

CLARK

2,450.0000000000

10

0.2800000000

KING

5,000.0000000000

10

0.5714285714

MILLER

1,300.0000000000

10

0.1485714286

JONES

2,975.0000000000

20

0.2735632184

福特

3,000.0000000000

20

0.2758620690

ADAMS

1,100.0000000000

20

0.1011494253

SMITH

800.0000000000

20

0.0735632184

SCOTT

3,000.0000000000

20

0.2758620690

WARD

1,250.0000000000

30

0.1329787234

TURNER

1,500.0000000000

30

0.1595744681

ALLEN

1,600.0000000000

30

0.1702127660

JAMES

950.0000000000

30

0.1010638298

BLAKE

2,850.0000000000

30

0.3031914894

MARTIN

1,250.0000000000

30

0.1329787234

 

 

2.8首先,最后,FIRST_VALUE,LAST_VALUE取基数的分析函数


    First功能描述:从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录。
    Last功能描述:从DENSE_RANK返回的集合中取出排在最后面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录。

     FIRST_VALUE,LAST_VALUE:返回结果集中排在第一位和最后一位的值。

     语法是:FIRST_VALUE(表达式)OVER(analytic_clause)


[SQL] 查看纯副本
  1. / * FORMATTEDON 2009/11/10 20:51(PLUS V4.8.8 FORMATTER)* /  
  2. SELECT  ENAME,DEPTNO,SAL,  
  3.        MIN  (SAL)KEEP(DENSE_RANK  FIRST  ORDER  BY DEPTNO) 
  4.        MAX  (SAL)KEEP(DENSE_RANK  LAST  ORDER  BY  DEPTNO)OVER(PARTITION  BY  DEPTNO) “ 最佳”  
  5.    SCOTT.EMP;  


 

ENAME

DEPTNO

SAL

最差

最好的

CLARK

10

2450

1300

5000

KING

10

5000

1300

5000

MILLER

10

1300

1300

5000

JONES

20

2975

800

3000

福特

20

3000

800

3000

ADAMS

20

1100

800

3000

SMITH

20

800

800

3000

SCOTT

20

3000

800

3000

WARD

30

1250

950

2850

TURNER

30

1500

950

2850

ALLEN

30

1600

950

2850

JAMES

30

950

950

2850

BLAKE

30

2850

950

2850

MARTIN

30

1250

950

2850

 


[SQL] 查看纯副本
  1. / *格式   2009/11/10 20:55(格式化Plusv4.8.8)* /  
  2. SELECT  ENAME,DEPTNO,SAL,  
  3.        FIRST_VALUE(ENAME)OVER(PARTITION  BY  DEPTNO  ORDER  BY  SAL  ASC )  AS  LOWEST_SAL的  
  4.    SCOTT.EMP;  


ENAME

DEPTNO

SAL

LOWEST_SAL

MILLER

10

1300

MILLER

CLARK

10

2450

MILLER

KING

10

5000

MILLER

SMITH

20

800

SMITH

ADAMS

20

1100

SMITH

JONES

20

2975

SMITH

福特

20

3000

SMITH

SCOTT

20

3000

SMITH

JAMES

30

950

JAMES

MARTIN

30

1250

JAMES

WARD

30

1250

JAMES

TURNER

30

1500

JAMES

ALLEN

30

1600

JAMES

BLAKE

30

2850

JAMES


2.9最伟大,最函数

最伟大的函数:取一个一维数组中的最大值。

至少函数:取一个一维数组中的最小值。

[SQL] 查看纯副本
  1. / * Formattedon 2009/11/10 20点59分(格式化加v4.8.8)* /  
  2. SELECT  GREATEST(1,2,3,4,5,6)  MAX  
  3.  FROM  DUAL;  
  4.    
  5. / * Formattedon 2009/11/10 20点59分(格式化加v4.8.8)* /  
  6. SELECT  最小二乘(1,2,3,4,5,6)  最小  
  7.   FROM  DUAL;  

2.10 TRUNC,圆形,解码,SUBSTR函数

全角的数字/字母/标点符号转半角to_single_byte

2.10.1 TRUNC函数

Trunc实际上是truncate函数,字面意思是截断,截尾。函数的功能是将数字进行截断。tranc()并不四舍五入。

[SQL] 查看纯副本
  1. / *格式化   2009/11/10 21:19(格式化加v4.8.8)* /  
  2. SELECT  TRUNC(1234.5678,2)RS  
  3.   FROM  DUAL;  
  4.    
  5.         RS  
  6. ----------  
  7.    1234.56  
  8.    
  9. / *格式化   2009/11/10 21:19(格式化加v4.8.8)* /  
  10. SELECT  TRUNC(1234.5678,0),RS  
  11.   FROM  DUAL;  
  12.    
  13.          RS  
  14. ----------  
  15.       1234  
  16.    
  17. / *格式化   2009/11/10 21:19(格式化加v4.8.8)* /  
  18. SELECT  TRUNC(1234.5678,-2),RS  
  19.   FROM  DUAL;  
  20.        RS  
  21. ------------  
  22.      1200  


2.10.2轮函数

 

圆函数:返回按指定位数进行四舍五入的数值。

语法:第一轮(表达式[,numdecimalplaces)

 

表达的必选。数值表达式被四舍五入。

numdecimalplaces可选。数字表明小数点右边有多少位进行四舍五入。如果省略,则轮函数返回整数。

 

/ *格式化2009/11/10 21:23(格式化加v4.8.8)* /

SELECT ROUND(12.45,1)RS

  FROM DUAL;

 

       RS

---------------

     12.5 

 

2.10.3解码函数

    DECODE(的价值,<if thisvalue>,<返回值>)FROM




[SQL] 查看纯副本
  1. / *格式化   2009/11/10 21:28(格式化加v4.8.8)* /  
  2. 选择 DECODE(NAME ,  “戴夫” ,  “我爱BL' ,  'NoLove )RS  
  3.   FROM  (SELECT  '戴夫'  NAME  
  4.           FROM  DUAL);  
  5. RS  
  6. ---------  
  7. 我爱BL  
  8.    
  9. / *格式化   2009/11/10 21:29(格式化加v4.8.8)* /  
  10. SELECT  DECODE(NAME ,  'BL' ,  '我爱大卫“ ,  “NoLove )RS  
  11.   FROM  (SELECT  '戴夫'  NAME  
  12.           FROM  DUAL);  
  13. RS  
  14. ------  
  15. NoLove  


 

2.10.4 SUBSTR函数

SUBSTR(字符串,开始计数):取子字符串,从启动开始,取数个。

 

[SQL] 查看纯副本
  1. / *格式化   2009/11/10 21:37(格式化加v4.8.8)* /  
  2. SELECT  SUBSTR('我爱你' ,3,4)RS  
  3.   FROM  DUAL;  
  4.    
  5. RS  
  6. ----  
  7. 爱  

原创粉丝点击