Oracle常用函数解析运用整理

Oracle已经内建了许多函数,不同的函数有不同的作用和用法,有的函数只能作用在一个记录行上,有的能够作用在多个记录行上,不同的函数可能处理不同的数据类型。常见的有两类,单行函数和分组函数 ,下面将逐一讲解区别及运用。

初次进入的请先学习另外俩篇开始ORACLE基本表操作常用语句整理以及Oracle查询语句及运用语句整理

一、字符函数

字符函数的输入参数为字符类型,其返回值是字符类型数字类型

字符函数:大小写控制函数、字符控制函数

大小写控制函数:UPPER、LOWER、INTCAP 返回值均为字符类型,改变大小写

UPPER(CHAR):该函数主要用于将字符串转化为大写格式
LOWER(CHAR):该函数用于将字符串转化为小写格式
INITCAP(CHAR):该函数用于将字符串中的每个单词的首字母大写,其余字符为小写
举例说明:将EMP表中JOB的字段转化为大写显示
SELECT * FROM EMP WHERE JOB=UPPER('SALESMAN'); 由于EMP表中为大写所以敲一下熟悉一下就好
等价于:SELECT * FROM EMP WHERE UPPER(JOB)='SALESMAN'; 
举例说明:将EMP表中JOB的字段转化为小写显示
SELECT * FROM EMP WHERE JOB=LOWER('CLERK'); 
等价于SELECT * FROM EMP WHERE LOWER(JOB)='CLERK'; 
举例说明:将EMP表中首字符转化为大写其余为小写显示
SELECT EMPNO,INITCAP(ENAME) FROM EMP ;
输出结果:
1	7369	Smith 
2	7499	A_Llen
--总结:可以写成函数名(表字段)=‘值’也可以写成表字段=函数名(‘值’)

字符控制函数:CONCAT、SUBSTR、LENGTH、INSTR、LPAD、RPAD、TRIM、ERPLACE 

DUAL 虚拟的表
CONCAT(STR1,STR2):该函数用于字符串的连接
举例说明:SELECT CONCAT('HELLO','ORACLE') FROM DUAL; 输出结果为:HELLOORACLE

SUBSTR(CHAR,M[,N]):该函数用于截断字符串,char指定表字段名,m用于指定从哪个位置开始截取,n用于指定截取长度,如果m为0,则从首字符开始
举例说明:分别截取1,3;0,3,-1,1
SELECT SUBSTR('HELLO',1,3) FROM DUAL; 结果:HEL
SELECT SUBSTR('HELLO',0,3) FROM DUAL; 结果:HEL
SELECT SUBSTR('HELLO',-1,1) FROM DUAL; 结果:O

LENGTH(char):该函数用于返回字符串的长度,字符串中我的后缀空格也记作字符串的长度
举例说明:统计Oracle这个字符串的长度
SELECT LENGTH('Oracle') FROM DUAL; 结果:7

INSTR(CHAR,CHAR2[,N[,M]]):该函数用于取得子串在字符串中的位置,Char1用于指定源字符串,char2用于指定子串,n用于指定起始搜索位置(默认值:1),M用于指定子串的第m次出现的次数(默认值:1)
举例说明:输出HELLO Oracle中Oracle的出现位置在哪
SELECT INSTR('HELLOE Oracle','Oracle') FROM DUAL;结果:7 
举例说明:输出HELLO Oracle HELLO Oracle 中第二个Oracle的出现位置在哪
SELECT INSTR('HELLOE Oracle HELLO Oracle','Oracle',1,2) FROM DUAL;结果:20

LPAD(CHAR1,N,CHAR2):该函数用于在字符串的左端填充字符,CHAR1用于指定源字符串,CHAR2用于指定被填充的字符,N用于指定填充的CHAR1总长度
举例说明:在HELLO左侧填充5个#
SELECT IPAD('HELLO',10,'#') FROM DUAL; 结果:#####HELLO

RPAD(CHAR1,N,CHAR2):该函数用于在字符串有段填充字符,CHAR1用于指定源字符串,CHAR2用于指定被填充的字符,N用于指定填充后的CHAR1的总长度
举例说明:在HELLO右侧填充3个#
SELECT RPAD('HELLO',8,'#') FROM DUAL;结果:HELLO###

REPLACE(CHAR,SEARCH_STRING[,REPLACEMENT_STRING]):该函数用于铁环与指定被替换字段,REPLACEMENT_STRING用于指定替换子串
举例说明:
SELECT REPLACE('HELLO WORD',WORD,'ORACLE') FROM DUAL;结果:HELLO ORACLE

二、数值函数

数值函数的输入参数和返回值都是数字类型

常用的数值函数:ROUND(),TRUNC(),MOD()

四舍五入ROUND

四舍五入:ROUND(N[,M]) 该函数用于返回四舍五入的结果,其中N可以使任意数字,M必须是整数
举例说明:
ROUND(25.328) 结果:25 四舍五入整数位
ROUND(25.328,2) 结果:25.33 四舍五入到小数点第2位
ROUND(25.328,-1) 结果:30 四舍五入到小数点前的第1位

截取数字TRUNC

截取数字:TRUNC(N,[M])该函数用于截取数字,其中N可以是任意数字,M必须是正数
举例说明:
TRUNC(25.328) 结果:25
TRUNC(25.328,2) 结果:25.32
TRUNC(25.328,-1) 结果:20

求模MOD

求模(求余数):MOD(M,N)
该函数主要用于取得来个数字相除后的余数,如果数字N为0则返回结果为M
举例说明:
MOD(25,6) 结果:1
MOD(25,0) 结果:25

三者实例说明

实例说明:求员工的日工资
SELECT ROUND(MGR/30),TRUNC(MGR/30) FROM EMP;
SELECT ROUND(MGR/30,2),TRUNC(MGR/30,2)FROM EMP;
SELECT ROUND(MGR/30,-1),TRUNC(MGR/30,-1)FROM EMP;

三、日期函数

日期函数:用于处理日期时间类型的函数

常用的日期函数:SYSDATEMONTHS_BETWEEN、ADD_MONTHS、NEXT_DAY、LAST_DAY、ROUND、TRUNC

系统日期SYSDATE:该函数用于返回当前系统日期

举例说明:关键字SYSDTATE 今天
SELECT SYSDATE FROM DUAL;
SELECT SYSDATE-1 AS 昨天,SYSDATE AS 今天, SYSDATE+1 AS 明天 FROM DUAL; 
输出结果:1	2019/9/15 18:16:58	2019/9/16 18:16:58	2019/9/17 18:16:58

月数俩者相差MONTHS_BETWEEN(D1,D2) D1表示当前的

举例说明:计算员工入职多长时间
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;
SELECT ROUND(MONTHS_BETWEEN(SYSDATE,HIREDATE)) FROM EMP;
SELECT ROUND(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) FROM EMP;

ADD_MONTHS

ADD_MONTHS(D,N):该函数应用于返回特定日期时间之后或之前的月份对应的日期时间,D用于指定日期时间,N可以是任意整数
举例说明:查询出每位员工入职30年后的日期
SELECT ENAME,ADD_MONTHS(HIREDATE,30*12)FROM EMP

返回指定NEXT_DAY

NEXT_DAY(D,CHAR):该函数用于返回特定日期之后的第一个工作日所对应的日期,D用于指定日期值,CHAR用于指定工作日
举例说明:查询下周一的日期
SELECT SYSDATE,NEXT_DAY(SYSSDATE,'星期一') FROM DUAL;

返回特定的日期LAST_DAY

LAST_DAY(D):该函数用于返回特定日期所在月份的最后一天
举例说明:查询出当前日期的月份最后一天
SELECT SYSDATE,LAST_DAY(SYSDATE) FROM DUAL;

四舍五入返回日期时间ROUND

ROUND(D[,FMT]):该函数用于返回日期时间的四舍五入的结果
D用于指定日期的时间值,FMT用于指定四舍五入的方式
举例说明:获取当前时间为2019-09-15
SELECT ROUND(SYSDATE,'YEAR') FROM DUAL; 结果:2020/1/1
SELECT ROUND(SYSDATE,'MONTH')FROM DUAL; 结果:2019/9/1

截断日期函数TRUNC

TRUNC(D,[,FMT]):该函数用于截断日期时间数据
D用于指定日期的时间值,FMT用于指定截断日期时间数据的方法
举例说明:
SELECT TRUNC(SYSDATE,'YEAR') FROM DUAL;
SELECT TRUNC(SYSDATE,'MONTH') FROM DUAL;

四、转换函数

将数值类型转换为字符类型TO_CHAR

TO_CHAR(N[,FMT]):将数值类型转换为字符类型
N用于指定数值,FMT用于指定数字格式的模型
格式模型常用元素如下:
9:显示数字,并且会忽略前导0
0:显示数字,并且位数不足时用0补齐
.:在指定位置显示小数点
,:在指定位置显示逗号
$:在数字签名加美元符号
L:在数字前加本地货币符号,也就是默认的$
--举例说明:日期转换为字符获得当前年
select to_char(sysdate, 'yyyy') from dual;
--获得当前年月日
SELECT TO_CHAR(HIREDATE, 'YYYYMMDD') FROM  EMP;
SELECT TO_CHAR(HIREDATE, 'YYYY"年"MM"月"DD"日"') FROM  EMP;
SELECT TO_CHAR(HIREDATE, 'YYYY-MM-DD') FROM  EMP;
--返回在星期, 星期日为1,星期一为2,星期二为3.........星期六为7
select to_char(sysdate, 'D') from dual;
举例说明:格式化价格样式
select to_char('11112222', 'L999,999,999') from dual; --¥11,112,222

将字符类型转换为日期类型TO_DATE

TO_DATE(CHAR[,FMT[,'NLSPARAMS']]):该函数用于将字符串转换为日期类型的数据
CHAR用于匹配日期数据的字符串,FMT用于指定日期格式模型,‘NLSPARAMS’用于指定日期语言
举例说明:查看1982年嘿嘿入职的员工信息
SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE>TO_DATE('1981-12-31','YYYY-MM-DD');
--转化成日期
select to_date('2017-06-19', 'YYYYMMdd') from dual; 

将数字转换数值类型TO_NUMBER

TO_NUMBER(N[,FMT]):该函数可以将包含数字的字符串转换成数值类型
N是包含数字的字符串,FMT用于指定数字格式模型
举例说明:显示工资大于7000的所有源的姓名和工资
SELECT ENAME,MGR FROM EMP WHERE MGR>TO_NUMBER('¥7000','L99999');

五、通用函数

NVL处理空值

NVL(EXPR1,EXPR2):该函数用于处理NULL
如果EXPR1是NULL则返回EXPR2,反之则返回EXPR1
举例说明:
SELECT ENAME,SAL,COMM,SAL+NVL(COMM,0) FROM EMP;

NVL2(EXPR1,EXPR2,EXPR3):与NVL一致都是处理NULL的
不同的是如果EXPR1不是空值,则返回2如果为NULL则返回EXPR3

举例说明:
SELECT ENAME,SAL,COMM,NVL2(COMM,SAL+COMM,SAL) FROM EMP;

NVLIF(EXPR1,EXPR2):该函数用于比较表达式,如果二者相等则返回NULL,否则返回EXPR1
举例说明:查询所有源的入职日期,并把本月初入职的员工月其他员工进行区分
SELECT EMPNO,ENAME,HIREDATE,NULLIF(HIREDATE,TRUNC(SYSDATE,'MONTH')) FROM EMP;

COALESCE(EXPR1[,EXPR2][,...]):该函数用于返回表达式列表中第一个NOT NULL表达式的结果
举例说明:SELECT ENAME,SAL,COMM,COALESCE(SAL+COMM,SAL)FROM EMP;
发布了35 篇原创文章 · 获赞 16 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/qq_38795430/article/details/97612616
今日推荐