Oracle中的单列函数 |
您所在的位置:网站首页 › 用if函数计算奖金提成比例 › Oracle中的单列函数 |
目录 一、nvl(参1,参2) 二、greatest(参1,参2...) 三、least(参1,参2...) 四、coalesce(参1,参2...) 五、nvl2(参1,参2,参3) 六、case when 6.1(一)第一种情况 6.2(二)第二种情况 七、decode(列,列中值1,值1,列中值2,值2...[值n]) 八、nullif(参数1,参数2) 一、nvl(参1,参2)参数1为空返回参数2,否则返回参数1;两个参数数据类型要一致。 NVL函数用于将NULL值替换为指定的值。如果第一个参数为NULL,NVL函数将返回第二个参数,否则返回第一个参数。语法如下: NVL(expr1, expr2)其中,expr1和expr2可以是任意非LOB类型的表达式。如果expr1为NULL,则返回expr2,否则返回expr1。 适用场景: NVL函数适用于需要将NULL值替换为指定值的场景,如: - 在查询结果中将NULL值替换为默认值;- 在计算中将NULL值替换为0或其他默认值。例如,查询employees表中每个员工的薪水和奖金,并将NULL值替换为0: SELECT first_name, last_name, NVL(salary, 0), NVL(commission_pct, 0) FROM employees;这条语句将查询employees表中每个员工的薪水和奖金,并使用NVL函数将NULL值替换为0。如果某个员工的薪水或奖金为NULL,查询结果中将显示0。 查询姓名,经理编号(如果经理编号为空返回666): select ename,nvl(mgr,666) from emp;查询每个人的姓名和他的月薪(月薪=工资+提成): select ename,sal+nvl(comm,0) from emp; 二、greatest(参1,参2...)求多个参数中的最大值,参数的数据类型要一致,其中空最大 select greatest(1,2,'3',4,5,''),greatest('a','b','c') from dual; 三、least(参1,参2...)求多个参数中的最小值,参数的数据类型要一致,其中空最小 select least(1,2,'3',4,5,''),least('a','b','c') from dual; 四、coalesce(参1,参2...)求多个参数中第一个不为空的值,参数的数据类型要一致,不接受隐式转换。 select coalesce(null,1,2,3) from dual;比如:查询提成,经理编号,工资以及它们中第一个不为空的值: select comm,mgr,sal,coalesce(comm,mgr,sal) from emp; 五、nvl2(参1,参2,参3)参1为空返回参3否则返回参2;比如: 如果经理编号为空返回 '老大' 否则返回 '小弟': select nvl2(mgr,'小弟','老大') from emp;如果comm列为空或者为0 返回 '无奖金' 否则返回 '有奖金' select nvl2(replace(comm,0),'有奖金','无奖金') from emp; 六、case when 6.1(一)第一种情况语法: select case 列 when 列中值1 then 值1 when 列中值2 then 值2 ... [else 值n] end from 表比如: 如果部门编号是10部门返回 十部门;20部门 返回 二十部门;30部门 返回 三十部门 select case deptno when 10 then '十部门' when 20 then '二十部门' else '三十部门' end 部门,deptno from emp;查询员工表的职位以及中文职位 select job,case job when 'CLERK' then '职员' when 'SALESMAN' then '销售' when 'MANAGER' then '经理' when 'PRESIDENT' then '董事长' else '分析' end 职位 from emp; 6.2(二)第二种情况 select case when 条件1 then 值1 when 条件2 then 值2 ... [else 值n] end from 表比如: 如果部门编号是10部门返回 十部门;20部门 返回 二十部门;30部门 返回 三十部门 select case when deptno=10 then '十部门' when deptno=20 then '二十部门' else '三十部门' end 部门 from emp;如果工资大于等于3000 返回 '一级';大于等于2000 返回 '二级';大于等于1000 返回 '三级';否则返回 '四级': select case when sal>=3000 then '一级' when sal>=2000 then '二级' when sal>=1000 then '三级' else '四级' end 工资等级 from emp;如果工资小于等于8000 返回 '1级';小于等于4000 返回 '2级';小于等于2000 返回 '3级';小于等于1000 返回 '4级';查询每个人的姓名 工资 工资等级: select case when sal |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |