Oracle-常⽤通⽤函数、条件判断函数和多⾏函数
Oracle-常⽤通⽤函数、条件判断函数和多⾏函数
本⽂中⽤到的表:
通⽤函数
通⽤函数就是可以作⽤于任何类型的函数(参数类型可以是number或varchar2或date类型)
1)NVL(a,b)
如果a为null值,则取b为返回结果,否则返回a。
2)NVL2(a,b,c)
如果a为null,则结果为b,否则结果为c。
3)NULLIF(a,b)
在类型⼀致的情况下,如果a与b相同,返回NULL,否则返回a。
例如:⽐较10和10.0是否相同
select NULLIF(10,’10’) from dual; ->错误,类型不⼀致
条件判断函数
1)case表达式
case表达式是SQL99标准。⼀个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境⽽定。如果⽤在字符串语境中,则返回结果味字符串。如果⽤在数字语境中,则返回结果为⼗进制值、实值或整数值。
语法1:
SELECT
case 字段
when 条件1 then 表达式1
when 条件2 then 表达式2
else 表达式n
end
语法2:
SELECT
CASE
WHEN 条件 THEN 表达式1 ELSE 表达式2 END;
范例:
SELECT CASE 1 WHEN 1 THEN ‘one’
WHEN 2 THEN ‘two’ ELSE ‘more’ END; -> 结果为“one”
SELECT CASE WHEN 1>0 THEN ‘true’ ELSE ‘false’ END; -> ‘true’
具体范例:查询emp表,将职位是分析员的,⼯资+1000;职位是经理的,⼯资+800;职位是其它的,⼯资+400
select ename “姓名”,job “职位”,sal “涨前⼯资”,
case job
when ‘ANALYST’ then sal+1000
when ‘MANAGER’ then sal+800
else sal+400
end “涨后⼯资”
from emp;
T1
2)decode()函数
decode()函数是专属oracle的语法
语法:
decode(字段,条件1,表达式1,条件2,表达式2,…表达式n)
还是上⾯那个问题,现在利⽤decode()函数来解决:
select ename “姓名”,job “职位”,sal “涨前⼯资”,
decode(job,’ANALYST’,sal+1000,’MANAGER’,sal+800,sal+400) “涨后⼯资”
from emp;
结果相同。
多⾏函数
多⾏函数:输⼊多个参数,或者是内部扫描多次,输出⼀个结果,例如:count(*)->(count在计算结果时,扫描了14次呢)并且注意的是,在oracle中,多⾏函数是不会统计null值的。
1)count
范例1:
统计emp表中员⼯总⼈数
select count(*) from emp;
*号适⽤于表字段较少的情况下,如果字段较多,扫描多间多,效率低,项⽬中提倡使⽤某⼀个⾮null唯⼀的字段,通常是主键
范例2:
统计公司有多少个不重复的部门
select count(distinct deptno) from emp;
2)max和min
想法和count⼀样,所以他们也是多⾏函数啊。
范例1:
查询员⼯表中最⾼⼯资,最低⼯资
select max(sal) “最⾼⼯资”,min(sal) “最低⼯资”
from emp;
⼊职最早,⼊职最晚员⼯
select max(hiredate) “最晚⼊职时间”,min(hiredate) “最早⼊职时间”
from emp;
3)sum和avg
范例1:
按部门求出该部门平均⼯资,且平均⼯资取整数,采⽤截断
oracle trunc函数的使用方法select deptno “部门编号”,trunc(avg(sal),0) “部门平均⼯资”
from emp
group by deptno;
(继续)查询部门平均⼯资⼤于2000元的部门
select deptno “部门编号”,trunc(avg(sal),0) “部门平均⼯资”
from emp
group by deptno
having trunc(avg(sal),0) > 2000;
单引号与双引号出现的地⽅
单引号出现的地⽅如下:
1)字符串,例如:’hello’
2)⽇期型,例如:’17-12⽉-80’
3)to_char/to_date(⽇期,’YYYY-MM-DD HH24:MI:SS’)
双引号出现的地⽅如下:
1)列别名,例如:select ename “姓名” from emp
2)to_char/to_date(⽇期,’YYYY”年”MM”⽉”DD”⽇” HH24:MI:SS’)‘’号中的英⽂字符⼤⼩写不敏感
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论