&.突然想到用三元運算符,是因爲某天項目代碼中有很多地方要進行非空判斷賦值,一直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代碼處理要快很多的。)
每次寫在結尾
新手作品,不斷學習,不斷改進。僅供參考。