概述
我看到了那天的夕阳,美得如此骄艳,我便决定,追寻夕阳,拼尽余生。
上一章简单介绍了 MySQL的日期和时间函数(十二),如果没有看过,请观看上一章
一 .MySQL的条件判断函数
在MySQL数据库查询的时候,常常会对查询的结果做一些判断,
常见的有:
- 如 sex字段时, 为1表示男,2表示女。
在数据库中存储的是1,2,不是男,女这样的中文, 在展示的时候,不能在性别那一栏展示成1,2而应该是男女。
需要类似于 java中的:
var str=null;
//用if 的情况
if(sex==1)
{
str="男";
}else{
str="女";
}
//或者用case
switch(sex){
case 1:{
str="男";
break;
}
case 2:{
str="女";
break;
}
default:{
}
}
- 如 scoreLevel 里面存储的 A,B,C,D,E 这样的,要展示成优,良,中,及格,差等。
3 . 也有如排序时, 将退回的记录放置在最前面,把待审核的,通过的依次往后排这样的。
在MySQL 中,也提供了类似的三个函数。
一.一 MySQL条件判断函数:
函数名 | 解释 |
---|---|
if(expr,v1,v2) | 如果条件 expr为true,返回v1,否则返回v2 |
ifNull(v1,v2) | 如果v1不为null,返回v1,否则返回v2 |
case expr when v1 then r1 [when v2 then r2] [else rn] end , case when expr=v1 then r1 [when v2 then r2][else rn] end | 如果值是v1,则执行r1,值是v2则执行r2,否则执行rn |
下面,分别进行相应的分析。
二. IF() 函数
expr条件, 其中,当expr的返回值是0,或者是null 时,返回false. 其余情况,均返回 true.
二.一 普通展示
select if(1,'true','false'),if(0,'true','false'),if(null,'true','false');
当条件值为0,或者是null时,才返回v2.
二.二 字符串比较
字符串比较函数是 strcmp(s1,s2), 返回值是 -1,0,1.
select strcmp('abc','bcd'),if(strcmp('abc','bcd'),'butong','tong') as '1',
strcmp('dbc','dac'),if(strcmp('dbc','dac'),'butong','tong') as '2',
strcmp('abc','abc'),if(strcmp('abc','abc'),'butong','tong') as '3';
如果两个字符串相同,比较值为0, 做false, 返回值为 v2.
如果两个字符串不相同,比较值不为0, 返回值为 v1.
二.三 常见例子 性别展示
创建一个 user 表,用 yuejl 数据库。 将yuejl数据库以前的表全部删除。
创建表:
create table user(
id int(11) primary key,
name varchar(11),
sex int(2)
);
插入数据: 1为男,2为女。
insert into user values(1,'两个蝴蝶飞',1),(2,'岳泽霖',1),(3,'精小妹',2);
插入成功。
展示数据:
select * from user;
发现,sex 展示的是 1,2。 这谁能看得懂啊。
用 If 函数进行展示,使其变成 ‘男’,‘女’ 样式展示。
select id,name,if(sex=1,'男','女') from user;
可以展示了。 注意,if() 只能判断一次。
三. IFNull(v1,v2) 函数
如果v1 值为空,只是null, 才返回v2, 如果 v1不为空,就返回v1.
三.一 普通展示
select ifnull(1,2),ifnull(0,2),ifnull(null,2);
三.二 业务中使用情况
通常使用的时候,语意类似是这样的, 如果成绩员工考试了,就显示考试成绩,如果没有考试,就显示没有考试。 如果员工的奖金不为空,就显示奖金,如果为空,就显示未发奖金。 这样类似的情况。
这儿用 员工考试成绩做例子吧。 还用刚才的 user 表。
往 user 表里面 添加一列, score, 是double(5,2) 类型的。
alter table user add score double(5,2);
将 ‘两个蝴蝶飞’ 和’精小妹’ 的成绩分别改为 95 和98, 岳泽霖的成绩不动,即不修改。
update user set score=95 where id=1;
update user set score=98 where id=3;
展示数据:
select * from user;
用IFNull() 函数进行改造展示,将 sex用if() 函数展示出来,现学现用嘛。
select id,name,if(sex=1,'男','女') as sex,ifnull(score,'未考试') as score from user;
发现,岳泽霖的那条记录,展示的成绩为 ‘未考试’。
与 if() 函数一样,也是只判断一次。
四. case() 函数。
case 函数可以判断多次,是对 if(),ifnull() 函数的一种改进。 case() 函数有两种形式。
四.一 case() 函数的两种语句
第一种语句是:
case 条件字段 when 值1 then 执行条件1 [when 值2 then 执行条件2] [else 执行条件n] end
将条件字段放置在最前面了。 末尾可以用 else 执行条件 n,来表示 没有情况符合时,执行这一种情况。
只是针对某一个字段进行比较。
其中,必须一定要写 end, 不能不写。
第二种语句是:
case when 条件字段=值1 then 执行条件1 [when 条件字段=值2 then 执行条件2] [else 执行条件n] end
将条件字段放置在后面,每一次都与值进行判断比较。 其中,else 也表示 没有情况符合时,执行条件n情况。
可以执行不同的条件字段进行比较。
end 也是不能省略。
其实,这两种情况,某种意义上来说,相同的。 根据不同的业务需求采用不同的方式处理。
四.二 case() 函数
如: 如果 sex 为1,展示 男,为2,展示女,否则展示保密。
往user 表里面插入一条 不填写 sex的数据 。
insert into user values(4,'精灵妹',null,null);
case 第一种函数展示:
select name,case sex when 1 then '男' when 2 then '女' else '保密' end as newSex from user;
case 第二种函数展示:
select name,case when sex=1 then '男' when sex=2 then '女' else '保密' end as newSex from user;
谢谢 !!!
最后
以上就是爱撒娇老鼠为你收集整理的MySQL的条件判断函数(十三)的全部内容,希望文章能够帮你解决MySQL的条件判断函数(十三)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复