1.decode函数:
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n,
default)
decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。例如在表s_emp中,给特定部门的员工加不等的薪水:
select dept_id,decode(dept_id,34,salary*2,
45,salary*1,
44,salary*3) "new salary"
45,salary*1,
44,salary*3) "new salary"
from s_emp;
decode作用就相当于一个表达式,把不同情况的结果显示在那一列,后面可以起别名,默认整个decode()就是列名.
2.case-when-then:
case
when expression1
then result1
when expression2
then result2 ....
else result
end)
case-when-then判断表达式的真假,如果为真,返回结果;如果为假,返回else值;如果未定义else值,则返回空值。例如还是上面那个例子:
select last_name,dept_id,(
case
when dept_id=34
then salary*2
when dept_id=45 then salary*3
else salary
end) "new salary"
when dept_id=45 then salary*3
else salary
end) "new salary"
from s_emp;
case-when-then作用就相当于一个表达式,把不同情况的结果显示在那一列,后面可以起别名,默认整个case-when-then就是列名.
不难看出,decode和case-when-then作用是一样的,只不过写法上不同而已。两者之间是可以相互转化的。具体使用哪种方法,就看个人的习惯了。