Oracle的单行函数:①字符函数②日期函数③转换函数④通用函数
@字符函数:主要进行字符串的操作
upper(): 变为大写返回;
lower(): 变为小写返回
initcap(): 开头首字母大写
length(): 求出字符串的长度
replace():进行替换
substr():字符串截取
范例1:观察转大写的函数
select upper('hello') from dual ;
用途:select * from emp where ename='&str';
此时如果输入的小写 则无法查询出结果,
不能要求用户这么多,只能由程序适应;
改进:select * from emp where
ename=upper('&str');
范例2:转小写的操作
select lower('HELLO') from dual ;
范例3:查询每个雇员名字使首字母大写的操作
select initcap(ename) from emp ;
范例4:查询每个雇员名字的长度
select ename,length(ename) from emp ;
范例5:查询雇员名字长度正好是5的雇员信息
select * from emp where length(ename)=5 ;
范例6:使用字母_替换姓名中的A
select replace(ename,'A','_') from emp
范例7:字符串的截取substr(字符串|列,开始点)|| substr(字符串|列,开始点,结束点)
select ename , substr(ename,3) from emp ;//下标0和1是一样的
select ename , substr(ename,0,3) from emp ;
范例8;截取雇员姓名的后3个字母
正常思路:通过长度减3 确定开始点
select ename,substr(ename,length(ename)-2) from emp ;
新思路:设置负数,表示从后截取
select ename , substr(ename,-3) from emp ;
面试题:substr函数截取的时候下标是从0还是1开始的?
在Oracle中substr函数从0或1开始都是一样的;
数字函数:3个;
round(数字|列[保留小数的位数])函数 四舍五入
trunc(数字|列[保留小数的位数])函数 舍弃指定位置的内容
mod(数字1,数字2)函数 取摸,去余数;
范例1:验证round()函数
select round(903.5) from dual ;
select round(903.53456) from dual ;
select round(903.5),round(-903.5678),
round(903.54678,2),round(903.522,-1) from dual ;
范例2:验证trunc()函数
select trunc(903.5),trunc(-903.5678),
trunc(903.54678,2),trunc(903.522,-1) from dual ;
范例3:验证mod()函数
select mod(10,3) from dual ;
日期函数:
范例1:取得当前的日期
select sysdate from dual ;
计算公式:
日期+数字=日期; 表示若干天后的日期
select sysdate+3,sysdate+300 from dual;
日期-数字=日期; 表示若干天前的日期
select sysdate-3,sysdate-300 from dual;
日期-日期=数字: 表示2个日期之间的天数
select ename,hiredate,sysdate-hiredate from emp ;
操作函数:
last_day(日期):求出指定日期的最后一天
范例:求出本月的最后一天
select last_day(sysdate) from dual ;
next_day(日期,星期数):求出下一个指定星期X的日期;
范例:求出下个周一
select next_day(sysdate,'星期一') from dual ;
add_months(日期,数字):求出若干月之后的日期
范例:求出毕业时间
select add_months(sysdate,5) from dual ;
months_between(日期1,日期2):求出2个日期之间的月份
范例:求出每个雇员到今天位置的雇佣月份
select ename,hiredate,trunc(months_between(sysdate,hiredate)) from
emp ;
select ename,hiredate,trunc(months_between(sysdate,hiredate)/12)
from emp ;
转换函数(核心)
to_char(字符串|列,格式字符串):将日期或者是数字变为字符串显示
to_date(字符串,格式字符串):将字符串变为date数据显示
to_number(字符串):将字符串变为数字显示
范例:to_char()函数
select to_char(sysdate,'yyyy-mm-dd')
,to_char(sysdate,'yyyy'),
to_char(sysdate,'mm'),to_char(sysdate,'dd')from dual ;
//fm格式化
select to_char(sysdate,'fmyyyy-mm-dd') from dual ;
select to_char(sysdate,'fmyyyy-mm-dd hh24:mi:ss') from dual ;
to_char()函数也可用于格式化数字 L 表示的是Local所在语言环境下的货币
select to_char(487584758,'L999,999,999') from dual ;
范例:to_date()函数 将字符串变为date的;
select to_date('2012-09-05','yyyy-mm-dd') from dual ;
范例:to_number()函数 将字符串变为数字
select to_number('1')+to_number('2') from dual ;
不是用也可完成
select t'1'+'2' from dual
通用函数:
nvl():处理null
要求查询出每个雇员的全部年薪
select ename,sal,comm,(sal+comm)*12 from emp ;
有些雇员的年薪编程了null,原因是comm字段 解决:将null变为0
select ename,sal,comm,(sal+nvl(comm,0))*12,nvl(comm,0) from emp
;
decode():多条件 多数值判断 类似于if else 语句
显示全部雇员的职位,但是职位替换为中文
CLERK -- 办事员
SALESMAN -- 销售
MANAGER -- 经理
ANALYST -- 分析师
PRESIDENT -- 总裁
select ename,job,decode(job,'CLERK','办事员',
'SALESMAN','销售','MANAGER',
'经理','ANALYST',
'分析师','PRESIDENT','总裁') from emp ;