函数
字符函数
接收字符输入返回字符或者数值,dual是伪表
1. 把小写的字符转换成大小的字符
upper('smith')
2. 把大写字符变成小写字符
lower('SMITH')
3. 把首字符大写
initcap('smith')
4. 字符串的连接可以使用concat可以使用“||”建议使用“||”
concat('hello', 'world')
5. 字符串的截取,使用substr,第一个参数是源字符串,第二个参数是开始索引,第三个参数长度,开始的索引使用1和0效果相同(掌握)
substr('hello', 1,3)
6. 获取字符串的长度
length('hello')
7. 字符串替换,第一个参数是源字符串,第二个参数被替换的字符串,第三个是替换字符串
replace('hello', 'l','x')
❖
数值函数
1.四舍五入函数:ROUND()
默认情况下ROUND四舍五入取整,可以自己指定保留的位数。
2.数值截取:TRUNC(),默认全部去掉小数,也可以指定保留的位数
3.取余数:MOD()
❖
日期函数
Oracle中提供了很多和日期相关的函数,包括日期的加减,在日期加减时有一些规律
日期 – 数字 = 日期
日期 + 数字 = 日期
日期 – 日期 = 数字
1. 范例:查询雇员的进入公司的周数。
分析:查询雇员进入公司的天数(sysdate – 入职日期)/7就是周数
2. 获得两个时间段中的月数:MONTHS_BETWEEN()
范例:查询所有雇员进入公司的月数
3. 获得几个月后的日期:ADD_MONTHS()
范例:求出三个月后的日期
❖
转换函数
1. TO_CHAR:字符串转换函数 (掌握)
范例:查询所有的雇员将将年月日分开,此时可以使用TO_CHAR函数来拆分
拆分时需要使用通配符
年:y, 年是四位使用yyyy
月:m, 月是两位使用mm
日:d, 日是两位使用dd
在结果中10以下的月前面被被补了前导零,可以使用fm去掉前导零
TO_CHAR还可以给数字做格式化
范例:把雇员的工资按三位用“,”分隔,在oracle中“9”代表一位数字
如果在钱的前面加上国家的符号可以使用“$”代表是美元,如果要使用本地的钱的单位使用“L”
2. TO_NUMBER:数值转换函数
TO_NUMBER可以把字符串转换成数值
3. TO_DATE:日期转换函数
TO_DATE可以把字符串的数据转换成日期类型
❖
通用函数
范例:查询所有的雇员的年薪
我们发现很多员工的年薪是空的,原因是很多员工的奖金是null,null和任何数值计算都是null,这时我们可以使用nvl来处理。
该函数类似if....else if...esle
语法:DECODE(col/expression, [search1,result1],[search2, result2]....[default])
Col/expression:列名或表达式
Search1,search2...:用于比较的条件
Result1, result2...:返回值
如果col/expression和Searchi匹配就返回resulti,否则返回default的默认值
范例:查询出所有雇员的职位的中文名
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
select t.empno,
t.ename,
case
when t.job = 'CLERK' then
'业务员'
when t.job = 'MANAGER' then
'经理'
when t.job = 'ANALYST' then
'分析员'
when t.job = 'PRESIDENT' then
'总裁'
when t.job = 'SALESMAN' then
'销售'
else
'无业'
end
from emp t
❖
聚合函数
范例:查询出所有员工的记录数
不建议使用count(*),可以使用一个具体的列以免影响性能。
范例:查询出来员工最低工资
范例:查询出员工的最高工资
范例:查询出员工的平均工资
范例:查询出20号部门的员工的工资总和
❖
集合操作
并集
UNION
UNION ALL
范例:工资大于1500,或者是20号部门下的员工
select * from emp where sal>1500 UNION select * from emp where deptno=20 |
---|
❖
交集
INTERSECT
范例:工资大于1500,并且是20号部门下的员工
select * from emp where sal>1500 intersectselect * from emp where deptno=20 |
---|
❖
差集
MINUS
范例:1981年入职的普通员工
select * from emp where to_char(hiredate ,'yyyy')='1981'minusselect * from emp where job='MANAGER' or job='PRESIDENT'; |
---|