Oracle中decode函式用法解析以及常用場景

2021-09-28 21:51:53 字數 3994 閱讀 3067

第一種形式

含**釋:

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語句簡單了許多

擴充套件:

sign()函式解釋:

sign()函式根據某個值是0、正數還是負數,分別返回0、1、-1

用法示例:

select id,sign(id-2) from t_decode;
截圖效果:

lpad()函式

在字段id前邊補欄位0 長度為2

1、準備測試資料:建立測試表t_decode,並插入測試資料//建立表,插入資料,查詢

create table t_decode(

id integer,

name varchar2(10)

);//插入資料

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

資料樣式

2、第一種形式decode函式的常用思路

①. 簡單使用:判斷字串

select id,name,

decode(id,1,'第乙個',2,'第二個',3,'第三個','沒有') new_id 

②.使用decode函式分段判斷表中id大小並根據大小劃分不同範圍

3、第二種形式decode函式的常用思路①. 比較大小

-- 比較大小

select decode(sign(100-90),-1,100,90) from dual;

②. 使用表示式來搜尋字串判斷name中是否含有a?

select id,name,decode(instr(name,'a'),0,'不含有a','含有a') as info from t_decode;

③. 實現行列轉換注意:decode相當於: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

④. 結合lpad函式,如何使主鍵的值自動加1並在前面補0結合lpad函式,如何使主鍵的值自動加1並在前面補0

select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,'0') new_id from t_decode;
拆分詳細講解:select * from t_decode

Oracle 中 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 預設值...

Oracle 中 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 預設值...

Oracle 中 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 預設值...