Oracle Decode 函数用法 Count函数条件统计 Sign 函数用法 Case When 函数
一、概述
1、本文系统的整理了,Oracle中常见的几个函数用法,都是涉及到条件判断分支类的相关函数,分别是 CASE ..WHEN ; DECODE , SIGN 。
2、假设有一张表Student ,有4个字段, ID,NAME,GENDER,AGE ,分别是 编号,姓名,性别,年龄。数据内容如下:
二、CASE WHEN 函数
1、简单版, 语法规则如下:
CASE col
WHEN val1 THEN res1
WHEN val2 THEN res
[ELSE def] -- 可选
END ;
1.2、简单版 示例:
SELECT
CASE s.GENDER
WHEN '1' THEN '男'
WHEN '0' THEN '女'
ELSE 'LGBT'
END AS "性别" ,
s.* FROM STUDENT s ;
2、完整版(case 搜索函数), 语法规则如下:
CASE
WHEN col=val1 THEN res1
WHEN col=val2 THEN res
[ELSE def] -- 可选
END ;
2.2、完整版 示例:
SELECT
CASE
WHEN s.GENDER ='1' THEN '男'
WHEN s.GENDER='0' AND s.ID = '3' THEN '女'
ELSE 'LGBT'
END AS GENDER ,
s.* FROM STUDENT s ;
三、DECODE 函数
1、关于DECODE 函数的介绍,请自行查找资料,语法规则如下:
DECODE(val, if1,then1 ,if2 ,then2 ... [default]) ;
-- 注意:default 可选的
2、DECODE 示例:
SELECT
DECODE(s.GENDER,'1','男','0','女') ,
DECODE(s.GENDER,'1','男','0','女','LGBT') , -- 使用default 值
DECODE(s.GENDER,'1',DECODE(s.ID,'1','大帅比'),'0','女') , -- 使用decode 嵌套
s.* FROM STUDENT s ;
四、SIGN 函数
1、Oracle 中SIGN函数的作用是:对于数字的判断,根据判断会得到三种结果,如下:
> 0 ; 返回 1
= 0 ; 返回 0
< 0 ; 返回 -1
2、SIGN 函数示例:
SELECT
SIGN(100) ,
SIGN(0) ,
SIGN(-123)
FROM DUAL ;
3、SIGN 函数和DECODE 函数组合使用:
SELECT
DECODE(sign(11),1,'正数'),
DECODE(SIGN(0),'0','零') ,
DECODE(SIGN(-333),'-1','负数')
FROM DUAL ;
4、sign 报错:ORA-01722: 无效数字:
SELECT SIGN('tt') FROM dual ;
五、COUNT 函数分条件统计
1、在【一、概述】中,Student 表有三条数据,现在需求是,统计出总人数,分别统计男、女人数(男1,女0),用一条SQL写出来,该怎么做呢? 假设目标表头如下:
2、可以使用 COUNT + DECODE 组合进行数量统计,SQL结果如下:
SELECT
COUNT(s.ID) AS "总人数",
COUNT(DECODE(s.GENDER, '1', s.ID)) "男" ,
COUNT(DECODE(s.GENDER, '0', s.ID)) AS "女"
FROM STUDENT s ;
六、总结
1、本文简单的记录了Oracle中几个条件判断函数的用法,详细的用法资料,可以自行逐个查找。 其中 部分函数在 Oracle和MySQL中是通用的。 如: SIGN , CASE WHEN , COUNT , 其中 decode 函数,在MySQL中不适用(版本是5.7.32)
2、本文中示例代码,所在Oracle版本是: CORE 11.2.0.1.0 Production ,可以使用: select * from v$version; 命令查看。