Oracle常用函式之decode

2021-09-07 09:10:45 字數 1983 閱讀 4965

當欄位username的值為ouxio時,輸出的是12345,當值為hahaa時,輸出22344,其他情況下都輸出emmm

case when篇具體**如下:

select

case username

when

'ouxio'

then

'12345'

when

'hahaa'

then

'22344'

else

'emmm'

endas password

from users;

而用decode就簡便不少,如下:

select 

decode (username,

'ouxio'

,'12345'

,'hahaa'

,'22344'

,'emmm'

)as password

from users;

decode函式第乙個引數是需要判斷的字段,剩下的每兩個引數代表判斷值輸出值,比如ouxio12345這兩個引數第乙個是指當username等於ouxio時輸出12345,後面的每兩個引數以此類推,這樣的兩兩引數可寫多個。而最後的乙個引數emmm,意思是當需要判斷的字段都沒有匹配的值時輸出最後乙個引數值emmm,這個引數可寫可不寫。

對比decode函式和case when很相似,都能完成同樣的效果,那麼有什麼區別呢

特有性,decode函式是oracle特有的函式,而case when不僅oracle,在mysql和sql server都可使用。

侷限性,decode只能判斷字段相等,但是可以配合sign函式進行大於、小於、等於,case when可用於更多的條件比較式,並且使用case搜尋函式時可對比多個字段。

sign()函式根據某個值是0、正數還是負數,分別返回0、1、-1,所以要用decode判斷與某個數的大小可如下

select

select decode(sign(5-

3),1

,'大於',-

1,'少於',0

,'相等'

)from dual

from users;

簡便性,decode使用起來相對比較方便,case when雖然繁瑣但是更為強大靈活。

擴充套件 mysqlif函式

mysql也有類似decode功能的函式,那就是if函式,不過功能要遜色許多,只能判斷單個條件,若想判斷多條件還得用case when。具體的if使用方法如下:

select

if(username =

'ouxio'

,'me'

,'you'

)as iswho from users;

當欄位usernameouxio時,輸出me,不是時輸出you

Oracle 之 常用函式

1 round x y 功能 返回四捨五入後的值 引數 x,y,數字型表示式,如果y不為整數則擷取y的整數部分,如果y 0則四捨五入為y位小數,如果小於0則為四捨五入到小數點向左第y位。返回 數字 示例 selectround 5555.6666,2.1 round 5555.6666,2.6 ro...

oracle裡的replace和decode函式

replace函式 replace 字串,a b decode函式是oracle pl sql的功能強大的函式之一,目前還只有oracle公司的sql提供了此函式,其它資料庫廠商的sql實現還沒有此功能。decode有什麼用途呢?先構造乙個例子,假設我們想給智星職員加工資,其標準是 工資在8000元...

ORACLE Oracle提高篇之DECODE

decode含義 decode 條件,值1,返回值1,值2,返回值2,值n,返回值n,預設值 這個是decode的表示式,具體的含 釋為 if 條件 值1 then return 翻譯值1 elsif 條件 值2 then return 翻譯值2 elsif 條件 值n then return 翻譯...