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);

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