Mysql的when then_mysql case when then 使用

2023-05-16

建表:

create table hank (id int,name varchar(20));

插入数据:

insert into hank values(1,'A');

insert into hank values(2,'B');

insert into hank values(3,'C');

通过case when then更新数据:

update hank set name = case id

when 1 then 'D'

when 2 then 'E'

when 3 then 'F'

end

where id in(1,2,3);

sql的意思是,更新name字段,如果id=1 则name的值为D,如果id=2 则 name 的值为E,如果id=3 则 name 的值为F。

即是将条件语句写在了一起。

这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行

表的创建

CREATE TABLE `lee` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`name` char(20) DEFAULT NULL,

`birthday` datetime DEFAULT NULL,

PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

数据插入:

insert into lee(name,birthday) values ('sam','1990-01-01');

insert into lee(name,birthday) values ('lee','1980-01-01');

insert into lee(name,birthday) values ('john','1985-01-01');

第一种用法:

SELECT name,

CASE WHEN birthday < '1981' THEN 'old'

WHEN birthday > '1988' THEN 'yong'

ELSE 'ok' END YORN

FROM lee

第二种用法:

SELECT NAME, CASE name

WHEN 'sam' THEN 'yong'

WHEN 'lee' THEN 'handsome'

ELSE 'good' END as oldname

FROM lee

第三种:当然了,case when 语句还可以复合

select name, birthday,

case

when birthday > '1983' then 'yong'

when name='lee' then 'handsome'

else 'just so so' end

from lee;

在这里用sql语句进行日期比较的话,需要对年加引号,要不然可能结果和预期的结果不同,

当然也可以用year函数来实现

select name,

case when year(birthday) > 1988 then 'yong'

when year(birthday) < 1980 then 'old'

else 'ok' END

from lee;

==========================================================

create table penalties

(

paymentno INTEGER not NULL,

payment_date DATE not null,

amount DECIMAL(7,2) not null,

primary key(paymentno)

)

insert into penalties values(1,'2008-01-01',3.45);

insert into penalties values(2,'2009-01-01',50.45);

insert into penalties values(3,'2008-07-01',80.45);

第一题:对罚款登记分为三类,第一类low,包括大于0小于等于40的罚款,第二类moderate大于40到80之间的罚款,第三类high包含所有大于80的罚款

select payment_date, amount,

case

when amount >= 0 AND amount < 40 then 'low'

when amount >=40 AND amount < 80 then 'moderate'

when amount >=80 then 'high'

else 'null' END

FROM penalties

第二题:统计出属于low的罚款编号

select * from

( select paymentno, amount,

case

when amount >= 0 AND amount < 40 then 'low'

when amount >=40 AND amount < 80 then 'moderate'

when amount >=80 then 'high'

else 'incorrect' end lvl

from penalties) as p

where p.lvl = 'low'

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql的when then_mysql case when then 使用 的相关文章

随机推荐