case的使用格式:
------简单case函数
CASE sex WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END
------case搜索函数:
CASE WHEN sex=1 THEN '男'
WHEN sex=2 THEN '女'
ELSE '未知'
END
PS:case判断语句只要满足符合条件的语句,剩下的case部分会自动忽略。就如java中的else if差不多。
---比如说这个列子 sex要是1或2的,他只会显示“已填写性别” 下面的判断不走
CASE WHEN sex in (1,2) THEN '已填写性别'
WHEN sex in (1) THEN '男'
WHEN sex in (2) THEN '女'
ELSE'未知'
END
下面实例案列:
首先创一张test表,字段 id,name,sex,代码如下:
SQL>create table "test"
(
id int not null,
name varchar(20) not null,
sex int null
);
SQL>insert into test(id,name,sex)
VALUES(1,'赵一',1),
(2,'赵二',1),
(3,'赵三',2),
(4,'赵四',2),
(5,'赵五',2);
SQL>insert into test(id,name)
VALUES(6,'赵六'),
(7,'赵七'),
(8,'赵八');
----------sex:1表示男,2表示女,空表示未知
SQL>select * from test;
id name sex
------------------------------
1 赵一 1
2 赵二 1
3 赵三 2
4 赵四 2
5 赵五 2
6 赵六
7 赵七
8 赵八
1、case的用法将代码用中文表示。
select id, name,
(
CASE sex when 1 then '男'
when 2 then '女'
else '未知'
end
) sex
from test
id name sex
------------------------------
1 赵一 男
2 赵二 男
3 赵三 女
4 赵四 女
5 赵五 女
6 赵六 未知
7 赵七 未知
8 赵八 未知
2、关于查出字段为null的处理:
PS:如果数据库没有该条数据,case判断语句无效,如果数据库有该条数据case判断语句有效。
(1)、数据库有id=8这条数据,且sex这个字段为空。
---------
SQL> select id, name,
(
CASE when sex is null then '未知'
when sex=1 then '男'
when sex=2 then '女'
end
) sex
from test
WHERE id=8
id name sex
------------------------------
8 赵八 未知
---------结果表明数据库有该条数据,进入为空判断转化。
(2)、数据库没有id=10这条数据。
SQL>select id, name,
(
CASE when sex is null then '未知'
when sex=1 then '男'
when sex=2 then '女'
end
) sex
from test
WHERE id=10
id name sex
------------------------------
---------结果表明数据库没有该条数据,不进入判断语句转化。
3、将case与sum结合使用,可以实现分段统计:
SQL>select
sum(CASE sex when 1 then 1 else 0 end) 男,
sum(CASE sex when 2 then 1 else 0 end) 女,
sum(CASE when sex is null then 1 else 0 end) 未知
from test
男 女 未知
------------------------------
2 3 3
---------当然这统计不仅仅是一个字段的,不相关联字段也可以一起统计,再没考虑运行速度上,目前我经常使用这中方法,以后学了查询速度快的方法在换。