Oracle中decode函數(shù)用法
1.decode函數(shù)的兩種形式
第一種形式
含義解釋:
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(字段或字段的運(yùn)算,值1,值2,值3)
這個函數(shù)運(yùn)行的結(jié)果是,當(dāng)字段或字段的運(yùn)算的值等于值1時,該函數(shù)返回值2,否則返回值3
當(dāng)然值1,值2,值3也可以是表達(dá)式,這個函數(shù)使得某些sql語句簡單了許多
sign()函數(shù)
解釋:
sign()函數(shù)根據(jù)某個值是0、正數(shù)還是負(fù)數(shù),分別返回0、1、-1
用法示例:
select id,sign(id-2) from t_decode;
截圖效果:
lpad()函數(shù)
在字段id前邊補(bǔ)字段0 長度為2
select lpad(id,2,0) from t_decode;
2.decode的一些工作常用思路總結(jié)
a.準(zhǔn)備測試數(shù)據(jù)
創(chuàng)建測試表t_decode,并插入測試數(shù)據(jù)
//創(chuàng)建表,插入數(shù)據(jù),查詢 create table t_decode( id integer, name varchar2(10) ); //插入數(shù)據(jù) insert into t_decode values (1,'a'); insert into t_decode values (2,'b'); insert into t_decode values (3,'c'); insert into t_decode values (4,'a');
數(shù)據(jù)樣式
b.第一種形式decode函數(shù)的常用思路
1. 簡單使用:判斷字符串
select id,name, decode(id,1,'第一個',2,'第二個',3,'第三個','沒有') new_id from t_decode;
2.使用decode函數(shù)分段
判斷表中id大小并根據(jù)大小劃分不同范圍
(-,2) low
[2,4) mid
[4,-] high
select id,name, decode(sign(id - 4),1,'high id',0,'high id','-1', decode(sign(id - 2),1,'mid id',0,'mid id',-1,'low id')) from t_decode;
c.第二種形式decode函數(shù)的常用思路
1. 比較大小
-- 比較大小 select decode(sign(100-90),-1,100,90) from dual;
2. 使用表達(dá)式來搜索字符串
判斷name中是否含有a?
select id,name,decode(instr(name,'a'),0,'不含有a','含有a') as info from t_decode;
3. 實(shí)現(xiàn)行列轉(zhuǎn)換
注意:decode相當(dāng)于:case when then else end語句
select sum(decode(name,'a',id,0)) id_1, sum(decode(name,'b',id,0)) id_2, sum(decode(name,'c',id,0)) id_3 from t_decode;
添加測試:
select decode(name,'a',id,0) id_1, decode(name,'b',id,0) id_2, decode(name,'c',id,0) id_3 from t_decode; -- 相等于:case when then else end select case name when 'a' then id else 0 end as id_1, case name when 'b' then id else 0 end as id_2, case name when 'c' then id else 0 end as id_3 from t_decode;
4. 結(jié)合Lpad函數(shù),如何使主鍵的值自動加1并在前面補(bǔ)0
結(jié)合Lpad函數(shù),如何使主鍵的值自動加1并在前面補(bǔ)0 select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,'0') new_id from t_decode;
拆分詳細(xì)講解:
select * from t_decode
select lpad(id,2,0) from t_decode
select to_number(id) from t_decode;
select max(to_number(id)+1) from t_decode;
select decode(count(id),0,1,max(to_number(id)+1)) from t_decode;
select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,‘0') new_id from t_decode;
以上所述是小編給大家介紹的Oracle中decode函數(shù)用法,希望對大家有所幫助。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
淺析常用數(shù)據(jù)庫的自增字段創(chuàng)建方法匯總
本篇文章是對常用數(shù)據(jù)庫的自增字段創(chuàng)建方法進(jìn)行了全面的匯總介紹,需要的朋友參考下2013-07-07oracle中l(wèi)ength、lengthb、substr、substrb函數(shù)用法介紹
這篇文章主要介紹了oracle中l(wèi)ength、lengthb、substr、substrb函數(shù)用法的相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以參考下。2017-09-09oracle求同比,環(huán)比函數(shù)(LAG與LEAD)的詳解
本篇文章是對oracle求同比,環(huán)比函數(shù)(LAG與LEAD)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Oracle SQL性能優(yōu)化系列學(xué)習(xí)三
Oracle SQL性能優(yōu)化系列學(xué)習(xí)三...2007-03-03在Spring中用select last_insert_id()時遇到問題
一直使用的Oracle數(shù)據(jù)庫,通過序列來實(shí)現(xiàn)自增字段,插入之前就已經(jīng)獲得了自增id,保存下來即可在后來的操作中使用2009-05-05