----几个判断赋值函数

----------几个判断赋值函数

NVL(参数1,参数2):判断参数1是否为空。如果不为空,则取参数1的值,如果为空,则取参数2的值
                 参数1是目标字段,参数2是一个具体的值
--需要注意:
参数2的值的类型要跟参数1的类型一致
--比如:

SELECT E.*,NVL(E.COMM,0) FROM EMP E;




NVL2(参数1,参数2,参数3):判断参数1是否为空。如果不为空,则取参数2的值,如果为空,则取参数3的值 
                         参数1是目标字段,参数2和参数3是一个具体的值
--需要注意的是:
参数2的值的类型要跟参数3的类型要一致, 可以跟 参数1的类型不一致(只是判断目标字段到底是否为空)                     
--比如:
SELECT E.*,NVL2(E.COMM,1,0) 
FROM EMP E;


CASE WHEN 判断
--语法1结构:

 

CASE 要比较的字段
WHEN 值1 THEN 结果1
  [WHEN 值2 THEN 结果2
  .
  .
  .
  ELSE 其他结果]
END


--需要注意的是:
1、位置是在 SELECT 后面作为要查询的信息
2、会生成一个新的列,一般给这个列取个别名
3、最后的 END 不要忘
4、ELSE 不要忘,除非你能列出所有的条件。否则这个新生成的列里面会有空值
5、语法1只能对 单个字段 进行 等值 判断


--比如:查询emp表中的员工的职位,并显示中文

SELECT E.*,
       CASE E.JOB
         WHEN 'CLERK' THEN '办事员'
         WHEN 'SALESMAN' THEN '销售'
         WHEN 'MANAGER' THEN '经理'
         WHEN 'ANALYST' THEN '分析员'
         --ELSE '总裁'
         --WHEN 'PRESIDENT' THEN '总裁'
       END AS "中文职称"
FROM EMP E;




/*小练习一把:查询EMP表中的员工的信息,根据部门编号给员工加薪,
                部门10的加10000
                部门20的加5000
                部门30的加50%
          显示员工的信息以及加薪后的工资*/

SELECT E.*,
       CASE E.DEPTNO
         WHEN 10 THEN E.SAL + 10000
         WHEN 20 THEN E.SAL + 5000
         WHEN 30 THEN E.SAL * 1.5
       END NEW_SAL
FROM EMP E;

--語法2結構
CASE
  WHEN 条件1.1 [AND/OR 条件1.2] THEN 结果1
  [WHEN 条件2.1 [AND/OR 条件2.2] THEN 结果2
  .
  .
  .
  ELSE 其他结果]
END


--需要注意的是:
1、不仅可以做等值(=)判断,也可以做非等值(!= 、<> 、>、 >=、 < 、<= 、IN、 BETWEEN AND)判断
2、可以对多个字段分别进行判断,但是需要注意,两个字段得到的结果不能有交集,否则,会以最先的那个判断为准

--比如:查询emp表中的员工的职位,并显示中文

SELECT E.*,
       CASE
         --WHEN E.ENAME = 'SMITH'  THEN '姓名asrfsrsfd'
         WHEN E.JOB = 'CLERK' THEN '办事员'        
         WHEN E.JOB = 'SALESMAN' THEN '销售'
         WHEN E.JOB = 'MANAGER' THEN '经理'
         WHEN E.JOB = 'ANALYST' THEN '分析员'
         ELSE '总裁'
       END "中文职称"
FROM EMP E;



/*小练习一把:查询emp表中员工的信息,给员工加薪
              工资大于2000的,奖金加5000
              工资大于1000的,奖金加8000
              其他的,奖金加20000
      查询员工的信息,以及加薪后的奖金*/ 

SELECT E.*,
       CASE
         WHEN E.SAL > 2000 THEN NVL(E.COMM,0) + 5000
         WHEN E.SAL > 1000 AND E.SAL <= 2000 THEN NVL(E.COMM,0) + 8000
         ELSE NVL(E.COMM,0) + 20000
       END NEW_COMM
FROM EMP E;




DECODE():不是所有的数据库都可以使用
--语法结构:
DECODE(目标字段,判断值1,返回值1,判断值2,返回值2,.....其他返回值);

--需要注意是:
1、它也是会新生成一个列
2、一般用做等值判断(也可以做非等值判断,只不过需要结合其他的函数:比如 SIGN(算术运算))
3、当最后一个参数是在偶数位的时候,那么个参数的值就是 ELSE 的值(上面的语法结构里的 其他返回值)
 当最后一个参数是在奇数位的时候,相当于没有 ELSE(意思就是:可能会存在空值)

--比如:查询emp表中的员工的职位,并显示中文
 

SELECT E.*,
       DECODE(E.JOB,
              'CLERK',
              '办事员',
              'MANAGER',
              '经理',
              'ANALYST',
              '分析员',
              'SALESMAN',
              '销售员',
              '总裁') "中文职称"
  FROM EMP E;



SIGN():返回里面的运算的结果,如果 结果<0,那么返回 -1
                                   结果=0,那么返回 0
                                   结果>0,那么返回 1
--比如:

SELECT SIGN(1-5),SIGN(1-1),SIGN(5-1) FROM DUAL;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值