您的位置:首页 > 数据库 > Oracle

171207之Oracle中decode函数、SIGN函数和INSTR函数

2017-12-07 16:50 441 查看
一: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 函数