oracle的执行顺序: from --> where --->group by ---> having --->select -->order by
字符串函数:
userenv('language')查看oracle字符集
upper(字段名):转换成大写
lower(字段名):转换成小写
substr(字段名,初始位置,[结束位置]) :字段截取函数(中文算一个长度),若想字节截取用substrb
lpad(字段名,length,[char]):字段长度若不大于length,则在字段值左边补char,若省略则补空格
lpad(字段名,length,[char]):字段长度若不大于length,则在字段值右边边补char,若省略则补空格
instr(str,char,[index],[index1]):查找字符串str中位置index后的字符匹配char字符index1次的位置
length(字段名) :取字段长度,中文字符也算一个长度。
lengthb(字段名) :取字段长度,中文字符也算两个长度。
trim(字段名):去前后空格
ltrim(字段名):去前空格
rtrim(字段名):去后空格
lpad(字段名,length):字段长度若不大于length,则在字段值左边补空格
lpad(字段名,length):字段长度若不大于length,则在字段值右边补空格
数值函数:
round(n[,保留位]):对n四舍五入到保留位
trunc(n[,保留闰]):对n截取到保留位
日期函数:
to_date('2015-01-01 00:01:01','yyyy-mm-dd hh24:mi:ss') 把字符串转换成时间类型(hh 是12小时制,也可用HH或HH24)
to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') 把时间转换成字段串类型
extract(year或month或day或hour或minute或second from 日期):获取日期的指定部分
last_day(日期):当月份的最后一天
next_day(日期,n):获取下个星期第n天的日期,若n为3,则取的是下周二的日期
months_between(日期,日期):取两个时间之间的月份差
round(日期[,yyyy || mm]):对指定时间段进行四舍五入,如不指定后面的参数则取下一天
trunc(日期[,yyyy || mm]):对指定时间段进行截取,如不指定后面的参数则舍去时分秒
空值处理函数:
nvl(字段,res1):如字段是null则返回res1
nvl2(字段,res1,res2):如字段有值则返回res1,无值则返回res2
聚合函数:
count(字段名或*或1),min(字段名),max(字段名),num(字段名),avg(字段名):聚合函数,where条件后需要有group by (字段名),若没有则全表查询
条件判断函数:
decode(表达式,值1,结果1,值2,结果2....默认结果)(oracle独有)表达式为固定值:
例:select dept_id,sum(decode(sex,'F',1,0)) F,sum(decode(sex,'M',1,0)) M from company group by dept_id;---统计各部门男女人数据
case when 表达式1 then 值1 when 表达式2 then 值2 .... else 值3 end :
例:select a.qujian,count(*) from (select (case when sal<1000 then '0-1000'
when sal<2000 then '1000-2000'
when sal<5000 then '2000-5000'
else '5000以上' end) qujian from emp_zh a) group by qujian;
集合函数:将结果集进行合并,交集或差集
union:将结果集合并,不允许放重复集 A union B
union all:将结果集合并,允许放重复集 A union all B
intersect:将两结果集相同记录取出 A intersect B
minus:将两结果集不同记录取出,取差集
例:A(1,3,5,7,9),B(3,5,6,7,8):A minus B 则是1,9; B minus A 则是6,8
排序函数:
rownum:伪列编号
row_number以组为单位编号
row_number() over(partition by 分组字段 order by 排序字段):将查询结果按分组字段划分成各个小组,
之后将组内数据排序(序号是顺序)。最后追加row_number()组内序号列
例:select * from (select empno,job,ename,deptno,sal,row_number() over(partition by job order by sal desc) rn from emp_zh) where rn<2
//查询每个职位工资最高的员工
select empno,ename,deptno,sal,row_number() over(partition by deptno order by sal) rn
from emp_zh ) where rn<2; //查询每个部门工资最高的员工
rank() over(partition by 分组字段 order by 排序字段):
与row_number的区别是条件相同的记录序号也相同,会跳号 1,2,2,4
dense_rank() over(partition by 分组字段 order by 排序字段):
与rank()不同的是重复记录序号是连续的
高级分组函数:
在使用group by字句时可使用下列高级分组函数,实现小计和总计的功能
rollup(字段):增加总计
例:select nvl(job,'总计'),sum(sal) from emp_zh group by rollup(job);---每个职位小计总工资及(多出一行)全公司总计总工资
select deptno,nvl(job,'总计'),sum(sal) from emp_zh where deptno is not null group by rollup(deptno,job) order by deptno,job
---分组统计小计和总公司总计
cube()函数:单个字段时和rollup()效果一样,多个字段进会分别进行小计
例:select nvl(job,'合计'),sum(sal) from emp_zh group by cube(job);
select deptno,nvl(job,'合计'),sum(sal)from emp_zh group by cube(deptno,job) order by deptno,job;
grouping sets():
grouping sets(字段1,字段2) 提取按字段1和字段2计算的小计记录,但没有总合计 (指定两个字段,一个字段没效果)
select deptno,nvl(job,'合计'),sum(sal)from emp_zh group by grouping sets(deptno,job) order by deptno,job;
分享到:
相关推荐
以下是对标题和描述中提到的Oracle常用函数的详细总结: 1. ASCII 函数:这个函数返回一个字符对应的ASCII码,即十进制数字。例如,`ASCII('A')`返回65,`ASCII(' ')`返回32(空格的ASCII码)。 2. CHR 函数:与...
oracle常用函数总结下载 oracle常用函数总结下载 oracle常用函数总结下载
### ORACLE常用函数总结 在Oracle数据库中,各种内置函数为数据处理提供了强大的支持。本文将根据提供的部分内容,详细介绍部分常用的Oracle函数,并解释其功能及用法。 #### 1. ASCII ASCII函数用于返回给定字符...
ORACLE常用函数总结,与SQL SERVER对比,防止混淆,更容易记忆。
110个oracle常用函数总结.TXT 精彩不容错过
以下是一些常用的日期函数: 1. `months_between(date1, date2)`:此函数计算两个日期之间相差的月份数,结果可能是小数或负数。例如,`months_between('01-sep-95', '11-jan-94')` 返回约 1.9774194个月。 2. `...
以上仅是Oracle数据库中80个常用函数的一部分,实际使用中还有许多其他功能强大的函数,如日期函数、数学函数、转换函数等,它们极大地丰富了数据处理的能力,提高了数据库操作的灵活性和效率。在实际工作中,理解并...
以下是一些Oracle常用函数的详细说明: 1. ASCII函数:此函数返回给定字符的ASCII码,即该字符对应的十进制数字。例如,ASCII('A')返回65,ASCII(' ')返回32。 2. CHR函数:它接受一个整数并返回相应的字符。例如...