oracle函数

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;

上一篇:Tomcat IDEA2021 安装配置与入门简介


下一篇:Linux下如何查看哪些进程占用的CPU内存资源最多