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

一: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

你可能感兴趣的:(171207之Oracle中decode函数、SIGN函数和INSTR函数)