欢迎投稿

今日深度:

oracle常用函数-decode

oracle常用函数-decode


Decode函数在实际开发中非常的有用,而且功能比较强大,与其他函数结合,能让很多的工作变得简单;

DECODE(字段, 条件1, 结果值1, 条件2, 结果值2, …默认值);

该函数的含义如下:

IF 条件=值1 THEN

RETURN(翻译值1)

ELSIF 条件=值2 THEN

RETURN(翻译值2)

......

ELSIF 条件=值n THEN

RETURN(翻译值n)

ELSE

RETURN(缺省值)

END IF

比较常见的一些用法:

1、比较大小

select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值

sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

例如:

select decode(sign(10-20),-1,10,20) from dual;

则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。

2、生成固定位数的序列号

我们看我们的水电煤等各种单子,经常有类似这种 2013000000000004这种固定长度的序列,我们可以结合Lpad函数,使主键的值自动加1并在前面补0;

select '2013' || LPAD(decode(count(ID),0,1,max(to_number(ID)+1)),12,'0') 记录编号 from FFM83

FFM83 是一张做测试的表,ID是它的流水ID,有3条数据;

注意:这种写法虽然简单,但是如果用户多,在高并发情况下,可能会生成同样的序列号;

如果在高并发的情况下,可以参考下面这种写法:

select '2013' || LPAD(SEQ_ FFM83.NEXTVAL,12,'0') 记录编号 from FFM83

SEQ_ FFM83是和FFM83表对应的一个SEQUENCE

3、简化多个条件的查询

比如我要查询男、女生的数量分别是多少?

通常我们这么写:

select count(*) from 表 where 性别=男;

select count(*) from 表 where 性别=女;

这样至少要查询2次,如果有更加多的选择的话,那么数据库的访问量会更加多;

用decode呢,只需要一句话

select sum(decode(sex,'男',1,0)),sum(decode(sex,'女',1,0)) from ffm83

ffm83 表中有一个sex字段,直接放了汉字的男女属性;

4、在Order by中使用Decode对指定字段进行排序

按照计算机,数学专业进行排序

例:

select * from ffm83 order by decode(subject, '计算机', 1, '数学', 2,10);

运行结果为:

女 1 计算机 2013/1/4

男 2 数学 2013/3/13

女 3 数学 2013/3/18

注意:在大数据量的排序中,尽量不要使用这种方式,数据库开销非常大;

5、将竖表转横表

我们要统计2013年上半年每个月有多少人,最好直接拉出来一张类似报表的样子。如果用常规的方法,会比较麻烦,用DECODE就会相对简单

SELECT SUM(DECODE(TO_CHAR(DT, 'MM'), '01', 1,0)) AS "1月"

, SUM(DECODE(TO_CHAR(DT, 'MM'),'02', 1,0)) AS "2月"

, SUM(DECODE(TO_CHAR(DT, 'MM'),'03', 1,0)) AS "3月"

, SUM(DECODE(TO_CHAR(DT, 'MM'),'04', 1,0)) AS "4月"

, SUM(DECODE(TO_CHAR(DT, 'MM'),'05', 1,0)) AS "5月"

, SUM(DECODE(TO_CHAR(DT, 'MM'),'06', 1,0)) AS "6月"

FROM FFM83;

运行结果如下:

1 0 2 0 0 0

备注:

表FF83的结构:

create table FFM83

(

SEX VARCHAR2(2),

ID INTEGER,

SUBJECT VARCHAR2(32),

DT DATE

);

表中的数据为:

女 1 计算机 2013/1/4

男 2 数学 2013/3/13

女 3 数学 2013/3/18

www.htsjk.Com true http://www.htsjk.com/oracle/22867.html NewsArticle oracle常用函数-decode Decode函数在实际开发中非常的有用,而且功能比较强大,与其他函数结合,能让很多的工作变得简单; DECODE(字段,条件1,结果1, 条件2,结果2, …默认); 该函数的含义如...
评论暂时关闭