假設是a/b
decode(b,0,null,a/b) 這樣如果b為0,輸出null,不為0輸出a/b
decode():將查詢結果翻譯成其他值,類似三目運算符
比較1個參數時 decode(column,'param','值1' ,'值2')
其中column為要選擇的table中所定義的column,
#如果column=='param',則select得到的name顯示為值1,
#如果column!='param',則select得到的name顯示為值2。
多個參數時
decode(inParam,'para1','值1' ,'para2','值2','para3','值3','para4','值4','para5','值5') name
#如果第一個參數inParam=='para1'那么那么select得到的那么顯示為值1;
#如果第一個參數inParam=='para2'那么那么select得到的那么顯示為值2;
#如果第一個參數inParam=='para3'那么那么select得到的那么顯示為值3;
#如果第一個參數inParam=='para4'那么那么select得到的那么顯示為值4;
#如果第一個參數inParam=='para5'那么那么select得到的那么顯示為值5;
#都不相等就為''
用處
1.除數為 0
SELECT trim(to_char(ROUND(decode(sum(a.QUTANTITY),0,null,sum(a.AMOUNT)/sum(a.QUTANTITY)),4))) AS CAvgPrice FROM POSITION a
2.解決Oracle的數值0.5只顯示成.5問題
SELECT decode(substr(l_num,1,1),'.','0'||l_num,l_num) FROM DUAL;
decode(substr((to_char(b.ReportValue)),0,1),'.','0'||to_char(b.ReportValue),to_char(b.ReportValue)) as Test_Result
SELECT decode(substr(0.5,1,1),'.','0'||.5,0.5) FROM DUAL;
substr獲取該字段的 第一位,
decode判斷是否為 “ . ” 是的話, ‘0’||字段, 拼接; 否 返回 該字段
SELECT regexp_replace(l_num, '^\.', '0.') FROM dual //也能實現