ORACLE函数

以下sql用scott用户进行测试


一、字符函数

大小写转换函数

LOWER(参数)

把【参数】全部变成小写字母

SELECT *
FROM EMP
WHERE LOWER(ENAME)='smith';
UPPER(参数)

把【参数】全部变成大写字母

SELECT *
FROM EMP
WHERE ENAME=UPPER('smith');
INITCAP(参数)

把【参数】第一个字母大写,其余全部小写

SELECT INITCAP(ENAME)
FROM EMP
WHERE ENAME='SMITH';

字符处理函数

CONCAT(参数1, 参数2)

把【参数1】和【参数2】连接起来

SELECT CONCAT(EMPNO,ENAME)
FROM EMP;
/*
	也可以直接用 EMPNO || ENAME 代替
*/
SUBSTR(参数1, 参数2, [参数3])

在【参数1】里,从【参数2】位置开始截取【参数3】的字符,【参数2】是从1开始,不指定【参数3】则全部截止

SELECT SUBSTR(ENAME,1,3)
FROM EMP
WHERE ENAME='SMITH';
LENGTH(参数)

获取【参数】的长度

SELECT LENGTH(ENAME)
FROM EMP;
LPAD(参数1,参数2,参数3)

把【参数1】补齐【参数2】位,如果不够位数则用【参数3】在左边填充

SELECT SAL,LPAD(SAL,10,'#')
FROM EMP;
RPAD(参数1,参数2,参数3)

把【参数1】补齐【参数2】位,如果不够位数则用【参数3】在右边填充

SELECT SAL,RPAD(SAL,10,'#')
FROM EMP;
REPLACE(参数1,参数2,[参数3])

在【参数1】里面找到【参数2】,用【参数3】替换掉,不指定【参数3】默认删除,不是换成空格

SELECT ENAME,REPLACE(ENAME,'A','#')
FROM EMP
WHERE ENAME='ALLEN';

二、数字函数

ROUND(参数1,参数2)

【参数1】四舍五入精确到【参数2】位数

SELECT ROUND(45.9,0)
FROM DUAL;
/*
	0代表四舍五入精确个位,这个输出结果就是46
	-1代表十位
	1代表小数点后一位
*/
TRUNC(参数1,参数2)

以【参数2】为位数截取【参数1】

SELECT TRUNC(45.943,2)
FROM DUAL;
/*
	2代表小数点后两位,结果为45.94
*/

三、日期函数

日期不能相加,日期也不能乘除,能相减,得到天数(数值)

SYSDATE

获取系统时间,没有(),格式为1999/11/18 11:01:59

SELECT SYSDATE
FROM DUAL;
/*
	两个时间相减得到天数(数值),除365截取或四舍五入都可以得到年数
*/
MONTHS_BETWEEN(日期参数1,日期参数2)

得到【参数1】和【参数2】的相差月数数值(数值可以参加运行,时间不行),【参数1】大

SELECT ENAME,MONTHS_BETWEEN(SYSDATE,HIREDATE)
FROM EMP;
ADD_MONTHS(时间参数1,数值参数2)

在时间【时间参数1】基础上增加【数值参数2】个月,得到一个新的日期

SELECT ADD_MONTHS(HIREDATE,3)
FROM EMP;
NEXT_DAY(时间参数)

计算返回当前【时间参数】那个月的最后一天的日期

SELECT LAST_DAY(HIREDATE)
FROM EMP;

四、转换函数

在这里插入图片描述

字符型要一定格式才能转化为日期型

TO_CHAR(参数1,模板参数2)

把时间【参数1】按【模板参数2】格式输出,可以把时间和数值转化为字符

SELECT TO_CHAR(HIREDATE,'YYYY-MM-DD')
FROM EMP;
TO_NUMBER(字符参数1,模板参数2)

把【字符参数1】按【模板参数2】转化为一个数值,字符参数1中有的特殊符号,模板参数也要有

SELECT TO_NUMBER('$800.00','$999,999.00')
FROM DUAL;
/*
	结果:800
*/
TO_DATE(字符参数1,模板参数2)

把【字符参数1】按照【模板参数2】转化为日期,oracle日期都是 / 去隔离年月日

SELECT TO_DATE('2001)11)22','YYYY-MM-DD')
FROM DUAL;
/*
	结果:2001/11/22
*/
SELECT TO_DATE('20011122','YYYYMMDD')
from dual;
/*
	结果也是:2001/11/22
*/

五、空值处理函数

NVL(参数1,参数2)

如果【参数1】为空值,则返回【参数2】,【参数1】【参数2】必须要类型相同

SELECT NVL(HIREDATE,'1-1月-2009')
FROM EMP;
/*
	'1-1月-2009'可以被识别成日期,可以理解为自动装箱
*/
NVL2(参数1,参数2,参数3)

如果【参数1】不为空值,则返回【参数2】,否则返回【参数3】

SELECT NVL2(ENAME,'有名字','没名字')
FROM EMP;
/*
	'1-1月-2009'可以被识别成日期,可以理解为自动装箱
*/

六、分支逻辑函数

CASE
CASE 匹配参数
	WHEN 参数1 THEN 表达式1
	[WHEN 参数2 THEN 表达式2]
	[WHEN 参数3 THEN 表达式3]
	[ELSE 表达式4]
END "别名"

如果【匹配参数】匹配上【参数1】,则执行【表达式1】,返回结果给别名列,如果都匹配不上执行表达式4,同样返回结果给别名列。

SELECT EMPNO,SAL,
	  CASE EMPNO
      	WHEN 1357 THEN SAL*2
      	WHEN 7654 THEN SAL*2
      	WHEN 7900 THEN SAL*2
      	ELSE SAL
      END "这3人工资提高"
FROM EMP;
DECODE
DECODE(匹配参数,参数1,表达式1,[参数2],[表达式2],[默认表达式]) AS "别名"

如果【匹配参数】匹配上了【参数】,则执行表达式1,以此类推,都匹配不上则执行默认表达式

SELECT ENAME,SAL,DECODE(EMPNO,1357,SAL*2,7654,SAL*2,SAL) AS "两人提高工资"
FROM EMP;

七、组函数

# 下面函数都会忽略null
# sum求和,求全部人的工资总和,值的和
SELECT SUM(salary) FROM emp;
# avg平均值,求人均工资,切记要先用NVL函数去处理空值
SELECT AVG(salary) FROM emp;
# max最大值,求最大工资的人
SELECT MAX(salary) FROM emp;
# min最小值,求最小工资的人
SELECT MIN(salary) FROM emp;
# count计算个数,求获得工资的人数,行的和(不是总行数和,如果有人工资为null是不会被计算的)
SELECT COUNT(salary) FROM emp;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值