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;
三、日期函数
日期函数:用于处理日期时间类型的函数
常用的日期函数:SYSDATE、MONTHS_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(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;