Oracle的分析函数(解析函数)说明
2012-09-06 10:11
405 查看
一。解析函数的说明
分析函数是甲骨文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] 查看纯副本
CREATE TABLE studentscore中
(
student_name VARCHAR2(20),
主题VARCHAR2(20),
评分数
)
INSERT INTO studentscore VALUES ('WBQ' ,'英语' ,90);
INSERT INTO studentscore VALUES ('WBQ' ,'数学' ,95);
INSERT INTO studentscore VALUES ('WBQ' ,'中国' ,88);
INSERT INTO studentscore 值(CZH' ,'英语' ,80);
INSERT INTO studentscore VALUES ('CZH' ,'数学' ,90);
INSERT INTO studentscore的 VALUES (CZH“
,“历史” ,92);
INSERT INTO的 studentscore VALUES ('CB' ,'政治' ,70);
INSERT INTO studentscore VALUES ('CB' ,'历史' ,75);
INSERT INTO的 studentscore VALUES ('LDH' ,'政治' ,80);
INSERT INTO studentscore VALUES ('LDH' ,'中国“ ,90);
INSERT INTO studentscore VALUES ('LDH'的,'历史' ,95);
选择 * 从 studentscore;
/ * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /
选择 student_name,科目, SUM (得分)
从 studentscore
GROUP BY CUBE (student_name中,受试者)
ORDER BY 1;
<跨越式= “颜色:#FF0000” >等同于以下标准SQL
</ SPAN>
/ * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /
选择 NULL ,科目, SUM (得分)
从 studentscore
GROUP BY 的主题
UNION
选择 student_name, NULL , SUM (得分)
从 studentscore
GROUP BY student_name
UNION
SELECT NULL , NULL , SUM (得分)
从 studentscore
UNION
选择 student_name,科目, SUM (得分)
从 studentscore
GROUP BY student_name中,受试者的
/ * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /
选择 student_name,科目, SUM (得分)
从 studentscore
GROUP BY ROLLUP (student_name科目);
/ * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /
选择 student_name, NULL , SUM (得分)
从 studentscore
GROUP BY student_name
UNION
SELECT NULL , NULL , SUM (得分)
从 studentscore
UNION
选择 student_name,科目, SUM (得分)
从 studentscore
GROUP BY student_name中,受试者的
/ * Formattedon 2009/11/08 20:35(格式化加v4.8.8)* /
选择 分组 (student_name), GROUPING (主题),student_name,主题,
SUM (得分)
从 studentscore
GROUP BY CUBE (student_name中,受试者)
ORDER BY 1,2;
/ * Formattedon 2009/11/08 20点36分(格式化加v4.8.8)* /
选择 分组 (student_name), GROUPING (主题),student_name,主题,
SUM (得分)
从 studentscore
GROUP BY ROLLUP (student_name中,受试者)
ORDER BY 1,2;
/ * Formattedon 2009/11/08 20点36分(格式化加v4.8.8)* /
SELECT GROUPING_ID(student_name,科目),student_name,主题,
SUM (得分)
从 studentscore
GROUP BY CUBE (student_name中,受试者)
ORDER BY 1;
/ * Formattedon 2009/11/08 20点36分(格式化加v4.8.8)* /
SELECT GROUPING_ID(student_name,科目),student_name,主题,
SUM (得分)
从 studentscore
GROUP BY ROLLUP (student_name中,受试者)
ORDER BY 1;
/ * Formattedon 2009/11/08 20点36分(格式化加v4.8.8)* /
选择 分组 (student_name), GROUPING (课题),
CASE
当 GROUPING (student_name)=
0
GROUPING (主题)=
1
THEN '学生成绩合计“
当 GROUPING (student_name)=
1
GROUPING (主题)=
0
THEN '课目成绩合计'
当 GROUPING (student_name)=
1
GROUPING (主题)=
1
“总计”
ELSE '
END 总结,
student_name,科目, SUM (得分)
从 studentscore
GROUP BY CUBE (student_name中,受试者)
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] 查看纯副本
/ *格式化 2009/11/08
20点48(格式Plusv4.8.8)* /
SELECT ENAME,DEPTNO,SAL,
RANK()OVER(PARTITION BY DEPTNO ORDER BY SAL DESC ) “RANK”
DENSE_RANK()OVER(PARTITION BY DEPTNO ORDER BY SAL DESC ) “DENSE_RANK”的,
ROW_NUMBER()OVER(PARTITION BY DEPTNO ORDER BY SAL DESC ) “ROW_NUMBER”
从 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] 查看纯副本
/ * Formattedon 2009/11/08 21:09(格式化加v4.8.8)* /
SELECT ENAME,DEPTNO,SAL,LAG(SAL)OVER(ORDER BY SAL)LAG,
LEAD(SAL)OVER(ORDER BY SAL)LEAD
从 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 |
/ * Formattedon 2009/11/08 21:11(格式化加v4.8.8)* /
SELECT ENAME,DEPTNO,SAL,LAG(SAL,2,0)OVER(ORDER BY SAL)LAG,
的LEAD(SAL,2,SAL)OVER(ORDER BY SAL)LEAD
从 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
/ * Formattedon 2009/11/08 21:25(格式化加v4.8.8)* /
选择 SUM (SAL) 的“总和”。
从 SCOTT.EMP;
/ * Formattedon 2009/11/08 21:27(格式化加v4.8.8)* /
SELECT ENAME,DEPTNO,SAL,
SUM (SAL)OVER(PARTITION BY DEPTNO ORDER BY SAL范围UNBOUNDED
PRECEDING) “SUM”
从 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] 查看纯副本/ * Formattedon 2009/11/08 21:29(格式化加v4.8.8)* /
选择 AVG (SAL) “AVG”
从 SCOTT.EMP;
/ * Formattedon 2009/11/08 21:31(格式化加v4.8.8)* /
SELECT ENAME,DEPTNO,SAL,HIREDATE,
ROUND((AVG (SAL)OVER(PARTITION BY DEPTNO ORDER BY HIREDATE
ROWS 在 1以上 1以下)),2)的 “c_mavg”
从 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] 查看纯副本/ * Formattedon 2009/11/09十六时50分(格式+ v4.8.8)* /
SELECT COUNT (*) “ 总”
从 SCOTT.EMP;
/ * Formattedon 2009/11/10 10:42(格式化加v4.8.8)* /
SELECT ENAME,EMPNO,DEPTNO,SAL,
COUNT (SAL)OVER(PARTITION BY DEPTNO ORDER BY SAL
范围 50货品 150
FOLLOWING)
作为 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 |
2.6.4最大函数
[SQL] 查看纯副本/ * Formattedon 2009/11/10 14:45(格式化加v4.8.8)* /
SELECT MAX (SAL) MAX
从 SCOTT.EMP;
/ * Formattedon 2009/11/10 14:46(格式化加v4.8.8)* /
SELECT ENAME,SAL,DEPTNO, MAX (SAL)OVER(PARTITION BY DEPTNO) MAX
从 SCOTT.EMP;
/ * Formattedon 2009/11/10 14点47分(格式化此外v4.8.8),* /
SELECT ENAME,SAL,DEPTNO
FROM (SELECT ENAME,SAL,DEPTNO, MAX (SAL)OVER(PARTITION BY DEPTNO)sal_max
从 SCOTT.EMP)
其中, 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] 查看纯副本
/ * FORMATTEDON 2009/11/10 20:24(PLUS V4.8.8 FORMATTER)* /
SELECT ENAME,SAL,DEPTNO,RATIO_TO_REPORT(SAL)OVER() AS RR
从 SCOTT.EMP
WHERE DEPTNO
= 10;
ENAME | SAL | DEPTNO | RR |
CLARK | 2450 | 10 | 0.28 |
KING | 5000 | 10 | 0.571428571428571 |
MILLER | 1300 | 10 | 0.148571428571429 |
/ * FORMATTEDON 2009/11/10 20:36(PLUS V4.8.8 FORMATTER)* /
SELECT ENAME,SAL,DEPTNO,
中RATIO_TO_REPORT(SAL)OVER(PARTITION BY DEPTNO)AREA_PCT
从 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] 查看纯副本
/ * FORMATTEDON 2009/11/10 20:51(PLUS V4.8.8 FORMATTER)* /
SELECT ENAME,DEPTNO,SAL,
MIN (SAL)KEEP(DENSE_RANK FIRST ORDER BY DEPTNO)
MAX (SAL)KEEP(DENSE_RANK LAST ORDER BY DEPTNO)OVER(PARTITION BY DEPTNO) “ 最佳”
从 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 |
/ *格式 上 2009/11/10
20:55(格式化Plusv4.8.8)* /
SELECT ENAME,DEPTNO,SAL,
FIRST_VALUE(ENAME)OVER(PARTITION BY DEPTNO ORDER BY SAL ASC ) AS LOWEST_SAL的
从 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] 查看纯副本
/ * Formattedon 2009/11/10 20点59分(格式化加v4.8.8)* /
SELECT GREATEST(1,2,3,4,5,6) MAX
FROM DUAL;
/ * Formattedon 2009/11/10 20点59分(格式化加v4.8.8)* /
SELECT 最小二乘(1,2,3,4,5,6) 最小
FROM DUAL;
2.10 TRUNC,圆形,解码,SUBSTR函数
全角的数字/字母/标点符号转半角to_single_byte
2.10.1 TRUNC函数
Trunc实际上是truncate函数,字面意思是截断,截尾。函数的功能是将数字进行截断。tranc()并不四舍五入。[SQL] 查看纯副本
/ *格式化 2009/11/10
21:19(格式化加v4.8.8)* /
SELECT TRUNC(1234.5678,2)RS
FROM DUAL;
RS
----------
1234.56
/ *格式化 2009/11/10 21:19(格式化加v4.8.8)* /
SELECT TRUNC(1234.5678,0),RS
FROM DUAL;
RS
----------
1234
/ *格式化 2009/11/10 21:19(格式化加v4.8.8)* /
SELECT TRUNC(1234.5678,-2),RS
FROM DUAL;
RS
------------
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] 查看纯副本
/ *格式化 2009/11/10
21:28(格式化加v4.8.8)* /
选择 DECODE(NAME , “戴夫” , “我爱BL' , 'NoLove )RS
FROM (SELECT '戴夫' NAME
FROM DUAL);
RS
---------
我爱BL
/ *格式化 2009/11/10 21:29(格式化加v4.8.8)* /
SELECT DECODE(NAME , 'BL' , '我爱大卫“ , “NoLove )RS
FROM (SELECT '戴夫' NAME
FROM DUAL);
RS
------
NoLove
2.10.4 SUBSTR函数
SUBSTR(字符串,开始计数):取子字符串,从启动开始,取数个。[SQL] 查看纯副本
/ *格式化 2009/11/10
21:37(格式化加v4.8.8)* /
SELECT SUBSTR('我爱你' ,3,4)RS
FROM DUAL;
RS
----
爱
相关文章推荐
- Oracle 分析函数(Analytic Functions) 说明
- oracle分析函数Ratio_to_report使用说明
- Oracle 分析函数(Analytic Functions) 说明
- Oracle 分析函数(Analytic Functions) 说明
- Oracle 分析函数(Analytic Functions) 说明
- Oracle 分析函数 "ORA-30485: 在窗口说明中丢失 ORDER BY 表达式"
- Oracle分析函数、多维函数和Model函数简要说明,主要针对BI报表统计
- Oracle常用分析函数说明
- Oracle分析函数、多维函数和Model函数简要说明,主要针对BI报表统计 推荐
- 利用Oracle内置分析函数进行高效统计汇总(2)
- Oracle 分析函数案例
- Oracle分析函数-OLAP函数总结
- oracle 分析函数 之 rollup,cube
- oracle分析函数与over()(转)
- .Net程序员学用Oracle系列(22):分析函数(OVER)
- oracle的分析函数over 及开窗函数
- Oracle分析函数之lag和lead 分析函数详解
- Oracle分析函数
- 教为学:Oracle SQL学习之路(一):分析函数之排名
- oracle分析函数问题1