最近发现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代码简洁明了,可读性更强。
每天进步一点点。
推荐微信公众号【排骨肉段】,记录日常的美好。