一:DECODE的语法:
DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果value 等于if1时,DECODE函数的结果返回then1,…,如果不等于任何一个if值,则返回else。
decode (expression, search_1, result_1, search_2, result_2, ....
search_n, result_n)
decode (expression, search_1, result_1, search_2, result_2, ....
search_n, result_n, default)
decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的将加20%;工资在8000元以上的加15%,通常的做法
是,先选出记录 中的工资字段值? select salary into var-salary from employee,然后对变量var-salary用if-then-else或choose case之类的流控制语句进行判断。 如果用DECODE函数,那么我们就可以把这些流控制语句省略,通过SQL语句就可以直接完成。如下:
select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,
salary from employee 是不是很简洁?
有学生成绩表student,现在要用decode函数实现以下几个功能:成绩>85,显示优秀;>70显示良好;>60及格;否则是不及格。
假设student的编号为id,成绩为score,那么:
select id, decode(sign(score-85),1,'优秀',0,'优秀',-1,
decode(sign(score-70),1,'良好',0,'良好',-1,
decode(sign(score-60),1,'及格',0,'及格',-1,'不及格')))
from student;
oracle函数:decode() 什么情况下要用到?
lSQL.append(" decode(t.bkc040, '1', '已导入',
'0', '未导入', t.bkc040) as bkc040n, ");
lSQL.append(" decode(t.bkc252, ");
lSQL.append(" '1', ");
lSQL.append(" '验证通过', ");
lSQL.append(" '0', ");
lSQL.append(" '未验证', ");
lSQL.append(" '-1', ");
lSQL.append(" '验证不通过', ");
lSQL.append(" '2', ");
lSQL.append(" '部分验证通过', ");
lSQL.append(" t.bkc252) as bkc252n ");
lSQL.append(" from KB77 t ");
lSQL.append(" where t.bkc133='"+bkc133+"' ");
if(StringUtils.isNotEmpty(bkc252)){
lSQL.append(" and t.bkc252='"+bkc252+"' ");
}
二:Sign函数
在Oracle/PLSQL中, sign 函数返回一个数字的正负标志.
语法如下:sign( number )
number 要测试标志的数字.
If number < 0, then sign returns -1.
If number = 0, then sign returns 0.
If number > 0, then sign returns 1.
例如:
sign(-23) would return -1
sign(-0.001) would return -1
sign(0) would return 0
sign(0.001) would return 1
sign(23) would return 1
sig(23.601) would return 1
示例:
一、select sign( 100 ),sign(- 100 ),sign( 0 ) from dual;
SIGN(100) SIGN(-100) SIGN(0)
———————————————————–
1 -1 0
二、a=10,b=20
则sign(a-b)返回-1
三:instr函数
在Oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。
其语法为: instr(sourceString,destString,start,appearPosition).
其中
1: sourceString 代表源字符串;
2: destString 代表想从源字符串中查找的子串;
3: start 代表查找的开始位置,该参数可选的,默认为1;
4: appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;
返回值为:查找到的字符串的位置
说明:如果start的值为负数,那么代表从右往左进行查找。
例:
select * from dictionary where instr(comments,’index’)>0;
参考博客:http://blog.csdn.net/oscar999/article/details/18399177