浅谈oracle中的decode函数

    最近发现oracle数据库中一个自带的函数decode。

    查看了一下用法,简直了。真是太好用了,看来多看API,真的可以短时间让我们有很大的提升。(虽然我也是读代码的过程中看到的~~)

    DECODE是Oracle公司独家提供的功能(ps:informix数据库也提供该函数),它是一个功能很强的函数。它虽然不是SQL的标准,但对于性能非常有用。到目前,其他的数据库供应商还不能提供类似DECODE的功能,甚至有的数据库的供应商批评Oracle的SQL不标准。实际上,这种批评有些片面或不够水平。就象有些马车制造商抱怨亨利·福特的“马车”不标准一样。(来自百度百科)

    一种吃不到葡萄说葡萄酸的感觉。但是为何说这个函数很强大呢,因为你在数据库中写了很多行的If函数,可能用了decode函数后,一行就可以解决。写完后,代码简洁明了,绝对上升了好几个档次。

    说一下具体的用法,你真的会“卧槽,这么强”

    decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值),这行代码就是decode全部的精髓以及用法。

    该函数的含义如下:

IF 条件=值1 THEN  RETURN(返回值1)

ELS IF 条件=值2 THEN  RETURN(返回值2)

......

ELSIF 条件=值n THEN  RETURN(返回值n)

ELSE  RETURN(缺省值)

END IF


decode(字段或字段的运算,值1,值2,值3)

    这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3

    当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多

下面举两个栗子:

栗子1:

    你要统计students表中,男生女生的数量:

    传统写法如下:

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

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

    然后使用Union连接,得到最终的统计结果。

    现在你只需要这样来写:

select decode(性别,男,1,0),decode(性别,女,1,0) from students

栗子2:

    应用到order by 排序中:

    在表中,有一列为学科,分别为语文,数学,英语,自然,美术等等,你要将表中信息按照学科分类。

    可以使用decode这样来写:

select * from 学科 order by decode(学科, '语文', 1, '数学', 2, , '外语',3...)


    上面两个例子,可以说明使用decode可以使我们sql代码简洁明了,可读性更强。



每天进步一点点。

推荐微信公众号【排骨肉段】,记录日常的美好。

你可能感兴趣的:(浅谈oracle中的decode函数)