oracle 函数,oracle函数

1、Oracle中函数大致可以分为哪两类?

单行函数、聚合函数

2、单行函数可以分为哪些?

字符函数、数字函数、转换函数、日期函数、正则表达式函数

3、字符函数有哪些?

length(xx)

lower(xx)、upper()

例如:select * from emp where ename=UPPER('&STR');--用户输入为大写

concat(m,n)--与拼接字符串||相似

initcap(xx)--首字母大写

nvl(x,y)--如果x为null,则x被替换为y;例如select nvl(null,'不能为空') from dual;

nvl2(x,y,z)--如果x为null,则x被替换为z;否则换位y

nanvl(n1,n2)--如果n1是数字,就返回n1否则返回n2

replace(x,y,z)--将x中的字符y替换为字符z

例如:select replace('xdff-sdf','-','**') from

dual;--结果为“xdff**sdf”

substr(x,m,n)--将x从第m位开始截取长度为n的字符出来;n不写默认截取到尾巴

例如:select substr('abcdefg',-3,2) from dual;--取负3位和负2位,即e和f

面试题:substr是从0还是1开始算?--0和1都一样

instr(xxxx,y,m,n)--在xxxx中找y,从xxxx中的第m个,找到的第n个在第几位;说白了就是找第n个y在第几位;例如:

select instr(ename,'T',1,2),ename from emp;--找到SCOTT的T,结果就是5

lpad(x,n,y)/rpad(x,n,y)

lpad(sno,6,'*')--用*把sno凑足6位数

trim(leading '不想显示的字符y' from x)

from 表;--将x的左边的y去掉

trim(trailing '不想显示的字符y' from x)

from 表;--将x的右边的y去掉

trim( both

'不想显示的字符y' from x) from 表;--将x的两边的y去掉

select trim( ' - sf - ') from dual;--结果显示- sf

-割这种情况默认跟不写both是等效的

ltrim和rtrim也是跟trim一样的用法

通用函数:DECODE

格式:decode(数值|列,'判断值1','显示值1','判断值2','显示值2'...)

例如:select

decode(job,'CLERK','办事员','SALES','销售员') from

emp;

4、数字函数有哪些?

abs(x)、ceil(x)、floor(x)取小于等于x的整数、mod(x,y)取余、round(x,y)取整四舍五入、trunc(x,y)截断取整;举例如下:

select round(4.1201,2) from dual;--结果为4.12

select round(4.1291,2) from dual;--结果为4.13

select round(4.1291,0) from dual;--结果为4

select round(4.9291,0) from dual;--结果为5

select round(114.1291,-2) from dual;--结果为100

select round(154.1291,-2) from dual;--结果为200

select trunc(4.1201,2) from dual;--结果为4.12

select trunc(4.1291,2) from dual;--结果为4.12

select trunc(4.1291,0) from dual;--结果为4,直接取整数部分

select trunc(4.9291,0) from dual;--结果为4,直接取整数部分

select trunc(114.1291,-2) from dual;--结果为100

select trunc(154.1291,-2) from dual;--结果为100

5、日期函数有哪些?

select add_months(sysdate,1) from dual;--求下一月的这个时候

select last_day(sysdate) from dual;--求本月最后一天的这个时间点

select

months_between('17-7月 18','19-7月 18')

from dual;--求月x-y的差值,结果为-0.064516(月)

select sysdate,next_day(sysdate,5) from

dual;--不是下5天,而是指从星期天开始数到第5天的那天

select

sysdate,next_day(sysdate,'星期一') from dual;--求下一个周一

select

sysdate,round(sysdate),round(sysdate,'yyyy'),round(sysdate,'MM'),round(sysdate,'dd')

from dual;--四舍五入,需研究一下

select

sysdate,trunc(sysdate),trunc(sysdate,'yyyy'),trunc(sysdate,'MM'),trunc(sysdate,'dd')

from dual;--没有四舍五入了

6、类型转换

select to_char(sysdate,'yyyy-MM-dd hh24:mi:ss') from dual;

select to_date('2018-07-20 11-02-33','yyyy-MM-dd HH12:MI:SS') from

dual;

7、聚合函数有哪些?

count()、min()、max()、sum()、avg()

补充问:group

by怎么使用?

select * from emp;--可以看出总共有14行数据

select job,avg(sal) from emp group by job;--使用group

by后被分组了,并统计每组的平均值

注意:group

by对行进行单独分组使用,意义不大,一般与聚合函数一起使用!

补充问:having子句是干嘛用的?

对聚合函数进行限制。

elect job,avg(sal) from emp group by job having

avg(sal)>1500;--注意having不能被替换成where

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值