oracle函数
字符函数
concat
连接两个字符串
select concat(‘hello’,‘oracle’) from dual;
dual虚拟的表,无法确定连接的两个字符串来自于哪个表
||连接字符串——select ‘hello’||‘oracle’ from dual;——‘hello’||‘oracle’
select concat((concat’aaa’,‘bbb’), ‘ccc’) from dual;
lpad、rpad
让字符串达到指定的长度
select lpad(‘abc’,10,’*’) from dual; 左边填充
select rpad(‘abc’,10,’*’) from dual; 右边填充
lower、upper
查询结果全部都是小写字母、查询结果全部都是大写字母
select ename,lower(ename) from emp;
initcap
首字母大写,其余小写
select ename,initcap(ename) from emp;
length
查长度
select ename,length(ename) from emp;
也可用于限定字符串长度
substr
截取字符串长度
select substr (ename,0,2) from emp;
从0开始截取两个字母
instr
查找字符是否存在于字符串,找到返回下标,如果没有返回0
select instr(‘abc’,‘b’) from dual;
下标从1开始——返回2
trim
去掉字符串首尾字符
select ename,trim(‘s’ from ename) from emp;
去掉首尾的‘S‘字符
to_char
将不是字符串格式转换为字符串格式
将日期类型转换为字符串类型
select ename,hiredate,to_char(hiredate,‘yyyy-mm-dd’) from emp;
sysdate系统时间
select to_char(sysdate,‘yyyy-mm-dd HH24:mi:ss’)from dual;
查出今天过生日的
select * from emp where to_char(hiredate,‘mmdd’)=to_char(sysdate,‘mmdd’);
更改时间
update emp set hiredate=to_date(‘1981-07-08’,‘yyyy-mm-dd’) where ename=‘JAMES’;
replace
select ename,replace(ename,‘S’,’*’) from emp;
将*替换S,只是在虚拟结果中显示,不影响实际数据
translate
select translate(ename,‘abc’,‘123’),ename from emp;
将ename中的abc按照顺序替换为123
select translate(ename,‘ABC’,‘12’),ename from emp;
c替换为空
ascii
求字符的ASCII码
select ascii(‘A’) from dual;
nlssort
对字符串进行排序
数学函数
abs
一个数的绝对值
ceil
向上取整
floor
向下取整
mod
相当于%
select mod(5,2) from dual;
round
四舍五入
trunc
截断
日期函数
add_months(日期,数字)
将一个日期加上指定的月份
select add_months(sysdate,10) from dual;
select sysdate,sysdate+1 from dual;
加一天
日期相减,得到相差的天数
select sysdate-to_date(‘2018-7-8’,‘yyyy-mm-dd’) from dual;
last_day(日期)
月最后一天
select last_day(sysdate) from dual;
months_between(日期1,日期2)
相差月份,前面减后面
select months_between(sysdate,‘8-7月-2020’)from dual;
new_time(时间,时区,‘gmt’)
按照时区
select next_day(sysdate,‘星期一’)from dual;
下星期一是几号
其他函数
nvl
空值处理
select ename nvl2(comm,0) from emp;
空值用0代替
select ename nvl2(comm,0,100) from emp;
不为空显示第一个,为空显示第二个
练习
1、有一批数据
35-106
2-109
3-55
3-106
3-3
108-27
12-77
35-55
先比较-左边的按照升序排列,再按照右边的按照升序排列
order by substr() instr() length() to_number()
create table ss
(num varchar(20) not null
);
insert into ss values(‘2-109’);
insert into ss values(‘3-55’);
insert into ss values(‘3-106’);
insert into ss values(‘3-3’);
insert into ss values(‘108-27’);
insert into ss values(‘12-77’);
insert into ss values(‘35-55’);
select num,to_number(substr(num,0,instr(num,’-’)-1)) as aa,to_number(substr(num,instr(num,’-’)+1,length(num)-instr(num,’-’))) as bb from ss order by aa asc,bb asc;
2、用户表
用户名 密码
zhangshan jajcuiauvi189288
lisi cjhasiio82875777
wangwu ksjciiou237621995
i——>1 o——>0
select num,to_number(substr(num,0,instr(num,’-’)-1)) as aa,to_number(substr(num,instr(num,’-’)+1,length(num))) as bb from ss order by aa asc,bb asc;
create table stu
(id varchar(20) not null,
pass varchar(30) not null
);
insert into stu values(‘zhangshan’,‘jajcuiauvi189288’);
insert into stu values(‘lisi’,‘cjhasiio82875777’);
insert into stu values(‘wangwu’,‘ksjciiou237621995’);
select translate(id,‘io’,‘10’),id from stu;
update stu set id=translate(id,‘io’,‘10’),pass=translate(pass,‘io’,‘10’);
3、学生表
学号 姓名 性别 出生日期
查询20天之内即将过生日的学生
select * from emp where to_date(to_char(hiredate,‘mm-dd’),‘mm-dd’)between sysdate and sysdate+20;