當欄位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
函式第乙個引數是需要判斷的字段,剩下的每兩個引數
代表判斷值
與輸出值
,比如ouxio
和12345
這兩個引數第乙個是指當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;
當欄位username
為ouxio
時,輸出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 翻譯...