oracle decode的用法
decode含義解釋:
decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
該函數(shù)的含義如下:
IF 條件=值1 THEN
RETURN(翻譯值1)
ELSIF 條件=值2 THEN
RETURN(翻譯值2)
......
ELSIF 條件=值n THEN
RETURN(翻譯值n)
ELSE
RETURN(缺省值)
END IF
decode(字段或字段的運算,值1,值2,值3)
這個函數(shù)運行的結果是,當字段或字段的運算的值等于值1時,該函數(shù)返回值2,否則返回值3
當然值1,值2,值3也可以是表達式,這個函數(shù)使得某些sql語句簡單了許多
使用方法:
1、比較大小
lect decode(sign(變量1-變量2),-1,變量1,變量2) from dual; --取較小值
sign()函數(shù)根據(jù)某個值是0、正數(shù)還是負數(shù),分別返回0、1、-1
例如:
變量1=10,變量2=20
則sign(變量1-變量2)返回-1,decode解碼結果為“變量1”,達到了取較小值的目的。
2、此函數(shù)用在SQL語句中,功能介紹如下:
Decode函數(shù)與一系列嵌套的 IF-THEN-ELSE語句相似。ba_exp與compare1,compare2等等依次進行比較。如果ba_exp和 第i 個compare項匹配,就返回第i 個對應的value 。如果ba_exp與任何的compare值都不匹配,則返回default。每個compare值順次求值,如果發(fā)現(xiàn)一個匹配,則剩下的compare值(如果還有的話)就都不再求值。一個為NULL的ba_exp被認為和NULL compare值等價。如果需要的話,每一個compare值都被轉換成和第一個compare 值相同的數(shù)據(jù)類型,這個數(shù)據(jù)類型也是返回值的類型。
Decode函數(shù)在實際開發(fā)中非常的有用
結合Lpad函數(shù),如何使主鍵的值自動加1并在前面補0
lect LPAD(decode(count(記錄編號),0,1,max(to_number(記錄編號)+1)),14,'0') 記錄編號 from tetdmis
eg:
lect decode(dir,1,0,1) from a1_interval
dir 的值是1變?yōu)?,是0則變?yōu)?
比如我要查詢某班男生和女生的數(shù)量分別是多少?
通常我們這么寫:
lect count(*) from 表 where 性別 = 男;
lect count(*) from 表 where 性別 = 女;
要想顯示到一起還要union一下,太麻煩了
用decode呢,只需要一句話
lect decode(性別,男,1,0),decode(性別,女,1,0) from 表
3,order by對字符列進行特定的排序
還可以在Order by中使用Decode。
例:表table_subject,有subject_name列。要求按照:語、數(shù)、外的順序進行排序。這時,就可以非常輕松的使用Decode完成要求了。
lect * from table_subject order by decode(subject_name, '語文', 1, '數(shù)學', 2, , '外語',3)
oracle中decode()函數(shù)
decode()只是個轉義的函數(shù)
例如在你的語句中decode(category,
'COMPUTER',
retail*1.1)
的意思就是
假如字段category為COMPUTER'則返回retail*1.1,這里retail*1.1是什么類型返回值就是什么類型;看你第二個語句也沒有錯誤(我說從語法結構上),而且我自己也做了測試沒有問題;你可以加Q然后遠程協(xié)助看看你的環(huán)境
oracle中decode()函數(shù)
decode()只是個轉義的函數(shù)
例如在你的語句中decode(category,
'computer',
retail*1.1)
的意思就是
假如字段category為computer'則返回retail*1.1,這里retail*1.1是什么類型返回值就是什么類型;看你第二個語句也沒有錯誤(我說從語法結構上),而且我自己也做了測試沒有問題;你可以加q然后遠程協(xié)助看看你的環(huán)境
oracle decode函數(shù)
--樓主 我來告訴你吧
--你的語句的意思是 當ename字段等于job字段的值時 把值置為 sal 你這個sal應該是一個字段名
--否則 就返回他自己的值 所以你的報錯是因為 ename和另外兩個字段的數(shù)據(jù)類型不一致
--也就是說ename,job ,sal 這三個數(shù)據(jù)類型要一致 必須一致 你可以檢查一下 處理好這個就可以了
--DECODE(ename,job ,sal,ename ) 這隱性判斷是 當ename=job 把ename=sal 否則 就等于他
--本身 所以 這三個數(shù)據(jù)類型要一致
--有什么問題可以隨時找我 希望采納
oracle中decode函數(shù)有什么用?
DECODE函數(shù)相當于一條件語句(IF).它將輸入數(shù)值與函數(shù)中的參數(shù)列表相比較,根據(jù)輸入值返回一個對應值。函數(shù)的參數(shù)列表是由若干數(shù)值及其對應結果值組成的若干序偶形式。當然,如果未能與任何一個實參序偶匹配成功,則函數(shù)也有默認的返回值。區(qū)別于SQL的其它函數(shù),DECODE函數(shù)還能識別和操作空值.
其具體的語法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value
試圖處理的數(shù)值。DECODE函數(shù)將該數(shù)值與一系列的序偶相比較,以決定最后的返回結果
value
是一組成序偶的數(shù)值。如果輸入數(shù)值與之匹配成功,則相應的結果將被返回。對應一個空的返回值,可以使用關鍵字NULL于之對應
result
是一組成序偶的結果值
default_result
未能與任何一序偶匹配成功時,函數(shù)返回的默認值
下面的例子說明了,如何讀取用戶CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的項目,作為DECODE函數(shù)的實參支持值。
SELECT
checkup_type,
DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
FROM
checkup;
關于Oracle的decode函數(shù)
可以啊,小于60不就是條件么。
不過decode要實現(xiàn)這個大于小于就要用到sign函數(shù)進行組合。
decode(sign(字段-60),-1,'正常',1,'異常')
建議用ca when then
ca when 字段<60 then ‘正' when 字段>60 then '異常' el '其他' end