oracle中decode和sign函数的用法

  • sign(n);
    sign函数说明:取数字n的符号,大于0返回1,小于0返回-1,等于0返回0(n可以是表达式,(n-200))

例子:
比较大小:
a=10;
b=50;
sign(a-b) ==-1
sign(b-a) == 1
sign(a-10)==0

  • 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语句简单了许多
例子:
有一张user表 这张表中有一个sex(性别)字段,但是字段的值是1或者0,我们需求是显示男或者女,因此处理,那么decode就可以解决了。
select decode(u.sex ,1,男,女) from user u;就可以了,
细节讲一下:
decode(u.sex ,1,男,女);其实decode底层应该是这样比较的(感觉)是u.sex==1?男:女(当然if else是可以的),我想说的是decode比较的是等于,其实并不能比较>或者是< 、>=、<=、只能是等于,但是我们可以结合sign(n)函数就很方便了,因为sign()返回的就是-1,0,1,我们可以根据这三个值来判断,
例子:
比较大小:
a = 10,
b=50.
select decode(sign(A-B),1,‘a>b’,0,‘相等’,-1,‘a<b’) from (select 30 a ,50 b from dual);
或者这样写
select decode(sign(A-B),1,‘a>b’,0,‘相等’,‘a<b’) from (select 30 a ,50 b from dual);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章