假设是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 //也能实现