四、转换函数

转换函数将值从一种数据类型转换为另外一种数据类型。常见的转换函数有:

1、ge'fd(d|n[,fmt])

把日期和数字转换为制定格式的字符串。Fmt是格式化字符串

代码演示:TO_CHAR对日期的处理

SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS')"date" FROM dual;

结果:

代码解析:

在格式化字符串中,使用双引号对非格式化字符进行引用

针对时间日期的格式化,格式化字符有:

参数

说明

示例

Y

Y或YY或YYY 年的最后一位,两位,三位

SELECT TO_CHAR(SYSDATE,'YYY') FROM dual;

Q

季度,1-3月为第一季度

SELECT TO_CHAR(SYSDATE,'Q') FROM dual;

MM

月份数

SELECT TO_CHAR(SYSDATE,' MM') FROM dual;

RM

月份的罗马表示

SELECT TO_CHAR(SYSDATE,' RM') FROM dual;

month

用9个字符表示的月份名

SELECT TO_CHAR(SYSDATE,'month') FROM dual;

ww

当年第几周

SELECT TO_CHAR(SYSDATE,'ww') FROM dual;

w

本月第几周

SELECT TO_CHAR(SYSDATE,'w') FROM dual;

DDD

当年第几天,一月一日为001 ,二月一日032

SELECT TO_CHAR(SYSDATE,'DDD') FROM dual;

DD

当月第几天

SELECT TO_CHAR(SYSDATE,'DD') FROM dual;

D

星期几

SELECT TO_CHAR(SYSDATE,'D') FROM dual;

DY

星期几的缩写

SELECT TO_CHAR(SYSDATE,'DY') FROM dual;

hh12

12小时制小时数

SELECT TO_CHAR(SYSDATE,'hh12') FROM dual;

hh24

24小时制小时数

SELECT TO_CHAR(SYSDATE,'hh24') FROM dual;

Mi

分钟数

SELECT TO_CHAR(SYSDATE,'Mi') FROM dual;

ss

秒数

SELECT TO_CHAR(SYSDATE,'ss') FROM dual;

针对数字的格式化,格式化字符有:

参数

示例

说明

9

999

指定位置处显示数字

.

9.9

指定位置返回小数点

,

99,99

指定位置返回一个逗号

$

$999

数字开头返回一个美元符号

EEEE

9.99EEEE

科学计数法表示

L

L999

数字前加一个本地货币符号

PR

999PR

如果数字式负数则用尖括号进行表示

代码演示:TO_CHAR对数字的处理

SELECT TO_CHAR(-123123.45,'L9.9EEEEPR')"date" FROM dual;

结果:

2、TO_DATE(X,[,fmt])

把一个字符串以fmt格式转换成一个日期类型

3、TO_NUMBER(X,[,fmt])

把一个字符串以fmt格式转换为一个数字

代码演示:TO_NUMBER函数

SELECT TO_NUMBER('-$12,345.67','$99,999.99')"num" FROM dual;

结果:

五、其它单行函数

1、NVL(X,VALUE)

如果X为空,返回value,否则返回X

2、NVL2(x,value1,value2)

如果x非空,返回value1,否则返回value2 。

3、DECODE(x,value1,return1,value2,return2,.....,valueN,returnN, returnEnd)

如果x的值等于value1,则返回return1 ,等于value2,返回return2,以此类推,returnEnd是缺省值,当X的值均不满足条件时,返回returnEnd。

等同于:

IF X =value1 THEN

return1

ELSIF 条件=value2 THEN

return2

......

ELSIF 条件=valueN THEN

returnN

ELSE

returnEnd

END IF

4、PIVOT(列转行)

PIVOT(聚合函数 for 列名 in (定义列名和范围)),其中in('')中可以指定别名和子查询。

代码演示:

create table demo(id int,name varchar(20),nums int); ----创建表

insert into demo values(1, '苹果', 1000);

insert into demo values(2, '苹果', 2000);

insert into demo values(3, '苹果', 4000);

insert into demo values(4, '橘子', 5000);

insert into demo values(5, '橘子', 3000);

insert into demo values(6, '葡萄', 3500);

insert into demo values(7, '芒果', 4200);

insert into demo values(8, '芒果', 5500);

select * from (select name, nums from demo) pivot (sum(nums) for name in ('苹果' 苹果, '橘子', '葡萄', '芒果'));

结果:

5、UNPIVOT(行转列)

UNPIVOT(新定义列名1 for 新定义列名2 in(定义列名和范围)),其中in('')中可以指定别名和子查询。

代码演示:

SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO

FROM (SELECT E.ENAME,

E.JOB,

E.SAL,

E.DEPTNO,

RANK() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL DESC) RANK--在按部门划分的基础上,工资从高到低分级,级别RANK从1开始依次递增

FROM EMP E) E

WHERE E.RANK= 1;

select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )

结果:

三、OVER()分析函数

分析函数:聚合函数(如sum()、max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录。若想对于某组返回多行记录,则需要使用分析函数。

备注:使用OVER分析函数时,分组需用使用partition by。

分区partiton by 与 group by的区别

group by会将结果集按照指定字段进行聚合,结果集会缩减,在统计部门人数,平均工资时会用到;

partition by会对结果集按照指定字段分层排列,结果集不会缩减,如将公司所有人按照部门进行分区,会发现结果集中同一部门的人会连续排列。

1、rank()/dense_rank over(partition by ... order by ...)

说明:over()在什么条件之上;

partition by 按哪个字段划分组;

order by 按哪个字段排序;

注意:

(1)使用rank()/dense_rank() 时,必须要带order by否则非法

(2)rank()/dense_rank()分级的区别:

rank(): 跳跃排序,如果有两个第一级时,接下来就是第三级。

dense_rank(): 连续排序,如果有两个第一级时,接下来仍然是第二级。

代码演示:

SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO

FROM (SELECT E.ENAME,

E.JOB,

E.SAL,

E.DEPTNO,

RANK() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL DESC) RANK--在按部门划分的基础上,工资从高到低分级,级别RANK从1开始依次递增

FROM EMP E) E

WHERE E.RANK= 1;

2、min()/max() over(partition by ...)

注:这里没有排序条件,若加上order by 排序条件,

MAX() OVER(PARTITION BY .. ORDER BY .. DESC) 排序规则只能为desc,否则不起作用,将查询到目前为止排序值最高字段的对应值

MIN() OVER(PARTITION BY .. ORDER BY .. ASC ) 排序规则只能为asc,否则不起作用,将查询到目前为止排序值最低的字段的对应值,

3、lead()/lag() over(partition by ... order by ...) 取前面/后面第n行记录

说明:

lead(列名,n,m): 当前记录后面第n行记录的的值,没有则默认值为m;如果不带参数n,m,则查找当前记录后面第一行的记录的值,没有则默认值为null。

lag(列名,n,m): 当前记录前面第n行记录的的值,没有则默认值为m;如果不带参数n,m,则查找当前记录前面第一行的记录的值,没有则默认值为null。

示例:查询个人工资与比自己高一位、第一位的工资的差额

4、FIRST_VALUE/LAST_VALUE() OVER(PARTITION BY ...) 取首尾记录

代码演示:

SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO,E.ROW_NUM

FROM (SELECT E.ENAME,

E.JOB,

E.SAL,

E.DEPTNO,

ROW_NUMBER() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL) ROW_NUM

FROM EMP E) E

WHERE E.ROW_NUM> 3;

5、ROW_NUMBER() OVER(PARTITION BY.. ORDER BY ..) 排序

代码演示:

SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO,E.ROW_NUM

FROM (SELECT E.ENAME,

E.JOB,

E.SAL,

E.DEPTNO,

ROW_NUMBER() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL) ROW_NUM

FROM EMP E) E

WHERE E.ROW_NUM > 3;

6、sum/avg/count() over(partition by ..)

代码演示:

SELECT E.ENAME,

E.JOB,

E.SAL,

E.DEPTNO,

SUM(E.SAL) OVER(PARTITION BY E.DEPTNO) SUM_SAL,--统计某组中的总计值

AVG(E.SAL) OVER(PARTITION BY E.DEPTNO) AVG_SAL,--统计某组中的平均值

COUNT(E.SAL) OVER(PARTITION BY E.DEPTNO) COUNT_SAL--按某列分组,并统计该组中记录数量

FROM EMP E;

SELECT A.DEPT_ID,

A.SALE_DATE,

A.GOODS_TYPE,

A.SALE_CNT,

SUM(A.SALE_CNT) OVER(PARTITION BY A.DEPT_ID) DEPT_TOTAL,--部门销售总和

SUM(A.SALE_CNT) OVER() CMP_TOTAL,--公司销售总额

AVG(A.SALE_CNT) OVER(PARTITION BY A.DEPT_ID) DEPT_AVG,--部门销售均值

AVG(A.SALE_CNT) OVER() CMP_AVG--公司销售均值

FROM LEARN_FUN_KEEP A;

7、 rows/range between … preceding and … following 上下范围内求值

说明:unbounded:不受控制的,无限的

preceding:在...之前

following:在...之后

rows between … preceding and … following

代码演示:

SELECT EMPNO,

ENAME,

DEPTNO,

SAL,--注意ROWS BETWEEN unbounded preceding AND current row 是指第一行至当前行的汇总

SUM(SAL) OVER(PARTITION BY DEPTNO

ORDER BY ENAME

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) max_sal

FROM SCOTT.EMP;

8、NULLS FIRST/LAST 将空值字段记录放到最前或最后显示

代码演示:

SELECT E.ENAME,

E.JOB,

E.SAL,

E.DEPTNO,

RANK() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL NULLS LAST)

FROM EMP E;

9、NTILE(n) 获取部分数据

代码演示:

SELECT E.ENAME,

E.JOB,

E.SAL,

E.DEPTNO,

NTILE(3) OVER(ORDER BY E.SAL DESC NULLS LAST) ALL_CMP, --若只取前三分之一,all_cmp=1即可,若只取中间三分之一,all_cmp=2即可

NTILE(3) OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL DESC NULLS LAST) ALL_DEPT --每个部门的分成三部分

FROM EMP E

备注:这是我自己对Oracle函数的整理笔记,有些笔记为了偷懒,就直接复制别人的代码,请代码原主人不要介意,谢谢

oracle 尖括号_Oracle常用函数整理相关推荐

  1. oracle有哪些常用函数,Oracle常用函数整理

    点击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货 之前已经给小伙伴们整理了SQL Server和Mysql的常用函数,还没有看的可以戳下 ...

  2. mysql数据库 常用函数_《MySQL数据库》常用函数整理

    原标题:<MySQL数据库>常用函数整理 以下内容,是我整理出来的比较常用的字符串函数,数值函数,日期函数. 第一类:字符串函数 1.conv(n,from_base,to_base):对 ...

  3. pandas 常用函数整理

    pandas常用函数整理,作为个人笔记. 仅标记函数大概用途做索引用,具体使用方式请参照pandas官方技术文档. 约定 from pandas import Series, DataFrame im ...

  4. oracle sql常用的函数,界别Oracle和SQL Server常用函数

    区分Oracle和SQL Server常用函数 一.数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) ...

  5. DL4J的矩阵处理模块ND4J的常用函数整理

    ND4J矩阵变换的常用函数整理 由本人阅读nd4j源码整理,nd4j是dl4j为了矩阵运算整出来的一套工具.对应python里的numpy,但是并没有numpy那么普及,不过至少使用dl4j搭建神经网 ...

  6. opencv常用函数整理

    opencv常用函数整理 一.常见函数整理 1.1 cv2.resize函数(图像size重定义) 1.2 cv2.getStructuringElement函数(构造卷积核) 1.3.cv2.put ...

  7. oracle中110个常用函数

    主要介绍了oracle中110个常用函数,方便大家编写出更强大的sql语句,需要的朋友可以参考下. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,a ...

  8. C++-string常用函数整理(建议收藏)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 最近刷笔试题,涉及到许多字符串相关的题目,所以将一些常用的函数整理一下,便于后面查看.本文后续持 ...

  9. 最详细的HIve常用函数整理及案例演示

    Hive常用函数 一.测试数据集 1.1 测试数据集: 1.2 结果展示 二.常用函数 2.1 关系运算 2.1.1 常见关系运算符 2.1.2 空值判断 2.1.3 非空判断 2.1.4 LIKE ...

最新文章

  1. python windows编程_在Windows下配置Python编程学习环境
  2. pyton中的self具体含义,加self与不加self有什么区别?
  3. ASP.NET Core 开源项目 nopCommerce,一款沉淀13年的电商开源佳作!
  4. 《工业控制网络安全技术与实践》一一第3章 工业控制网络安全威胁
  5. PHP页面显示中文字符出现乱码
  6. (44)FPGA时序逻辑与组合逻辑(组合逻辑)
  7. Python+Android进行TensorFlow开发
  8. linux下安装共享软件,Linux 系统下各种包的安装方法分享
  9. python平方和psum_P19 python sum()函数和.sum(axis=0)函数的使用
  10. linux chmod、chown命令不起作用
  11. PRD 算法 Golang 实现
  12. 电子工程师除了挣工资,还可以这样增加收入!
  13. # 7-45 航空公司VIP客户查询 (25 分)
  14. mysql gis polygon_把POLYGON转换到MULTIPOLYGON 中
  15. linux docker安装nginx且测试elasticsearch分词
  16. PLC数据采集与远程监控方案
  17. C++题目分享之小鱼比可爱
  18. 【AltiumDesigner专栏】01.05——ECAD-MCAD(一)
  19. 这几个程序员必备画图工具,很实用!
  20. 图解红黑树及Java进行红黑二叉树遍历的方法

热门文章

  1. 大厂的 404 页面都长啥样?最后一个绝了...
  2. 掌握好这些不变的底层知识,任他东西南北风!
  3. Spring、Spring MVC、Spring Boot三者的关系还傻傻分不清楚?
  4. cop2000计算机组成原理,COP2000计算机组成原理-南昌大学网络教学平台.doc
  5. binlog工具_基于Binlog实时同步数仓,有哪些不为人知的坑?
  6. unable to get repr for class ‘torch.tensor‘
  7. libtorch Tensor cannot be used as a tuple
  8. TensorRT5 yoloV3加速
  9. pytorch loss function 总结
  10. Hibernate5.2之原生SQL查询