Oracle 中 decode 函数用法
含义解释: decode (条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF ? ?条件=值1 ? THEN? ? ? ? ? ? ? ? ? RETURN ? 返回值1 ELSEIF 条件=值2 ? THEN ? ? ? ? ? ? ? ? ? ? ?RETURN ?返回值2 ???? ? ?..... ELSEIF ?条件=值n ? THEN ? ? ? ? ? ? ? ? ? ? ? ?RETURN 返回值n ? ELSE ? ? ? ? ? ? ? ? ? ? ? ?RETURN 缺省值 END IF decode?(字段或字段的运算,值1,值2,值3) ? ? ? 这个函数运行的结果是,当字段或字段运算的值等于 值1 时,该函数返回 值2,否则返回 值3 ?当然 值1,值2,值3也可以是表达式,这个函数使得某些sql语句简化了许多。 ? ? ? 使用方法: 1、比较大小 select decode?(sign(变量1 - 变量2),-1,变量1,变量2)) ?from dual;--取较小值 sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 例如: 变量1=10,变量2=20 则sign(变量1-变量2) 返回-1,decode?解码结果是“变量1”,达到了取小值的目的。 2、此函数用在SQL语句中,功能介绍如下: Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次进行比较。如果base_exp和 第i 个compare项匹配,就返回第i 个对应的value 。如果base_exp与任何的compare值都不匹配,则返回default。每个compare值顺次求值,如果发现一个匹配,则剩下的compare值(如果还有的话)就都不再求值。一个为NULL的base_exp被认为和NULL compare值等价。如果需要的话,每一个compare值都被转换成和第一个compare 值相同的数据类型,这个数据类型也是返回值的类型。 ? ? ? Decode函数在实际开发中非常的有用 结合Lpad函数,如何使主键的值自动加1并在前面补0 ? ? eg: ? select decode(dir,1) from a1_interval dir 的值是1变为0,是0则变为1 ? 比如我要查询某班男生和女生的数量分别是多少? ? 通常我们这么写: select count(*) from 表 where 性别 = 男; select count(*) from 表 where 性别 = 女; 要想显示到一起还要union一下,太麻烦了 用decode呢,只需要一句话 select sum(decode(性别,男,1,0)),sum(decode(性别,女,1,0)) from 表 eg: select sum(decode(siteno,‘LT‘,0)),sum(decode(siteno,‘SZ‘,0)) from facd605; select sum(case siteno when ‘LT‘ then 1 else 0 end),sum(case siteno when ‘SZ‘ then 1 else 0 end) from facd605; 参照来源:https://www.cnblogs.com/vinsonLu/p/3512526.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |