首页 > IT职业 > IT职场 > 详解Mysql case then使用
表的创建
?
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
|
数据插入:
?
| 123 |
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
|
第二种用法:
?
SELECT NAME, CASE name WHEN 'sam' THEN 'yong' WHEN 'lee' THEN 'handsome' ELSE 'good' END as oldnameFROM lee
|
第三种:当然了,case when 语句还可以复合
?
select name, birthday, casewhen birthday > '1983' then 'yong' when name='lee' then 'handsome' else 'just so so' endfrom lee;
|
在这里用sql语句进行日期比较的话,需要对年加引号,要不然可能结果和预期的结果不同,
当然也可以用year函数来实现
?
select name, case when year(birthday) > 1988 then 'yong' when year(birthday)
|
第一题:对罚款登记分为三类,第一类low,包括大于0小于等于40的罚款,第二类moderate大于40到80之间的罚款,第三类high包含所有大于80的罚款
?
select payment_date, amount, casewhen amount >= 0 AND amount
|
第二题:统计出属于low的罚款编号
?
select * from( select paymentno, amount, casewhen amount >= 0 AND amount
|
PS:Mysql,Case When,Case多个字段
?
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
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1830/viewspace-2805865/ ,如需转载,请注明出处,否则将追究法律责任。