各位用户为了找寻关于详解Mysql case then使用的资料费劲了很多周折。这里教程网为您整理了关于详解Mysql case then使用的相关资料,仅供查阅,以下为您介绍关于详解Mysql case then使用的详细内容

表的创建

? 1 2 3 4 5 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

数据插入:

? 1 2 3 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');

第一种用法:

? 1 2 3 4 5 SELECT name,  CASE WHEN birthday < '1981' THEN 'old' WHEN birthday > '1988' THEN 'yong'  ELSE 'ok' END YORN FROM lee

第二种用法:

? 1 2 3 4 5 SELECT NAME, CASE name  WHEN 'sam' THEN 'yong'  WHEN 'lee' THEN 'handsome'  ELSE 'good' END as oldname FROM lee

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

? 1 2 3 4 5 6 select name, birthday,  case when birthday > '1983' then 'yong'  when name='lee' then 'handsome'  else 'just so so' end from lee;

在这里用sql语句进行日期比较的话,需要对年加引号,要不然可能结果和预期的结果不同, 当然也可以用year函数来实现

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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的罚款

? 1 2 3 4 5 6 7 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的罚款编号

? 1 2 3 4 5 6 7 8 9 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'

PS:Mysql,Case When,Case多个字段

? 1 2 3 4 5 6 7 8 9 select distinct a.PatientID,a.PatientCode,a.PatientSex,a.MobileNo,a.HomePhoneNo,a.UserAge,a.PatientName,a.PatientIDCard, DATE_FORMAT(a.RegistDate,'%Y-%m-%d') as RegistDate,  case when b.usedstartTime is not null and b.UsedEndTime is null then '1' when b.usedstartTime is not null and b.UsedEndTime is not null then '2'  end as 'usedState'  from mets_v_patient_baseinfo a  left join mets_devices_used_history b on a.patientid = b.PatientID  where  (select ifnull(IsDeleted,0) from userpublic_info where UserID = a.PatientID ) = 0  and 1=1  order by PatientID Desc limit 0,15