oracle除数为0时的解决方法(decode的使用)

  • Post author:
  • Post category:其他


decode(除数,0,显示0%,不为零的正常表达式)代替原来那个有可能出0除报错的表达式

解决:select   decode(b,0,0,a/b*100)   per   from   aa;


(1)decode的含义

含义解释:



decode


(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

该函数的含义如下:

IF 条件=值1 THEN

RETURN(翻译值1)

ELSIF 条件=值2 THEN

RETURN(翻译值2)

……

ELSIF 条件=值n THEN

RETURN(翻译值n)

ELSE

RETURN(缺省值)

END IF



decode


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

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

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

(2)decode的使用

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.结合Lpad函数,如何使主键的值自动加1并在前面补0


select

LPAD(


decode(


count(记录编号),0,1,max(to_number(记录编号)+1)


)


,


14,’0′


)

记录编号


from tetdmis

eg:

select decode(dir,1,0,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’,1,0)),sum(decode(siteno,’SZ’,1,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;