我是靠谱客的博主 爱撒娇老鼠,最近开发中收集的这篇文章主要介绍MySQL的条件判断函数(十三),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我看到了那天的夕阳,美得如此骄艳,我便决定,追寻夕阳,拼尽余生。

上一章简单介绍了 MySQL的日期和时间函数(十二),如果没有看过,请观看上一章

一 .MySQL的条件判断函数

在MySQL数据库查询的时候,常常会对查询的结果做一些判断,
常见的有:

  1. 如 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:{
			
		}
	}
  1. 如 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的条件判断函数(十三)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部