&.突然想到用三元运算符,是因为某天项目代码中有很多地方要进行非空判断赋值,一直if else又觉得很多余,然后就想到了三元运算符。
a.java中的三元运算符
String code = null;
String result = code !=null ? "18":"15";
System.out.println(result);
打印结果:15
解释是:如果code不等于空,result="18",否则result="15"
这里code = null,所以result = "15".
b.oracle中的三元运算符
1)
NVL( A, B)
如果A不为null,返回A的值,
如果A为null,返回B的值,
如果A和B都为null,返回null
2)NVL2(A,B,C)这是上一个函数的扩展函数。
如果A为null,返回C
如果A不为null,返回B
c .有人又提到decode()这个函数,但是这个函数一般是做定值条件判断
DECODE(条件f,值1,返回值1,值2,返回值2.....值n,返回值n,default)
解释下这个函数:
1)如果条件f = 值1 该函数的结果为 返回值1
2)如果条件f = 值2 该函数的结果为 返回值2
.
.
3)如果所以条件都不满足,该函数的结果为 default(默认值,自己设定)
4)如果没有设置默认值,返回null
有人喜欢直接看代码,上代码:
table:
name date
------------------
yang 2016-8-27
zhang
liu
li
------------------
------------------
SQL>select name,decode(date,null,"yes","no") time from table
结果:
name time
------------------
yang no
zhang yes
liu yes
li yes
------------------
------------------
SQL>select name,decode(date,null,"yes") time from table
结果:
name time
------------------
yang
zhang yes
liu yes
li yes
------------------(没有匹配和默认值,就返回空了)
d.又一说case when可以实现
CASE WHEN 字段 IN ( 'a', 'b') THEN '第一结果'
WHEN 字段 IN ('a') THEN '第二结果'
ELSE'其他' END
这样写好像也可以,未测试,对case的使用不熟悉。
提供一下思路,感兴趣的可以自己测试。
e.到最后发现又是写到oracle的函数去了,所以说如果oracel使用的好,会让开发方便很多。(个人感觉oracel处理业务是会比java代码处理要快很多的。)
每次写在结尾
新手作品,不断学习,不断改进。仅供参考。