平时在项目中常用到三目运算法,因为简单的if,else 可以用三目运算来替代,这样可以减少很多代码量,今天有个同事在sql中遇到类似情况,想通过最简洁的代码来过滤,百度了一下,发现sql中有类似三目运算的情况,跟酱油爷说的case when差不多,记录下来以备以后不时之需:
类似三目运算的sql:
select * from T_Op_ClassLearnerMapping where type in
(
Case
WHEN type=1 THEN '1' ELSE '2'
END
)
order by Type desc
case when还有一种用法,就是直接在数据库中转换,在页面显示别名,
比如有个字段是type类型,每个值代表不同含义,就可以直接通过case when来显示中文,这种方式比较简便
select *,type=Case
WHEN type=1 THEN '学员'
WHEN type=2 THEN '客户'
WHEN type=3 THEN '教师'
ELSE 'null'
END
from T_Op_ClassLearnerMapping
PS,我在园子提的问题,各位大神提供的方式:
有对数据库很精通,有对三目运算很精通的么?eg: var a=""; var b=a==""?True:False; 我想问一下,在数据库中sql有类似的判断吗?
酱油兴爷:我记得oracle的。 case when a=b and a is null then 'true' else 'false' end resault.
路过秋天:有isnull(条件,true则值A,false则值B) 具体去扫一下数据库类型提供什么就用什么
青 蛙:如果判断是否为空取不同值则有nvl和nvl2两个函数,多个值做相应转换可用decode。比较复杂的再用case when
PPS:秋天跟青蛙说的函数我都没用过,所以先记着~~呵呵,不管怎样,还是很谢谢他们的回答