資料清洗小記(15):DECODE利用sign函式做大小值判斷
【背景】
對某業務資料處理時,需要判斷兩個資料欄位的大小,保留較大的資料存入到指定欄位下面。考慮使用decode函式和sign函式來實現這個目的。
【解決】
1、decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值)
2、sign()函式:根據某個值是0、正數、負數,分別返回0、1、-1
3、為獲得兩個欄位的較大值或較小值:
A>B, A-B>0, sign(A-B)=1, 獲得大值即A, decode(sign(A-B),1,A,B)
A<B, A-B<0, sign(A-B)=-1, 獲得小值即A, decode(sign(A -B),-1,A,B)
【實驗】
先利用續表來實驗一下效果,如下:
select decode(sign(66-88),-1,66,88) from dual;
返回兩個數值的較小值作為顯示結果,如下:
返回兩個數值的較大值作為顯示結果,如下:
select decode(sign(66-88),1,66,88) from dual;
開始實驗
1、建立實驗表
CREATE TABLE PANDUAN
(
A VARCHAR2(50),
B VARCHAR2(50)
);
2、插入實驗資料
INSERT INTO PANDUAN(A,B) VALUES ('23','45');
INSERT INTO PANDUAN(A,B) VALUES('38','29');
INSERT INTO PANDUAN(A,B) VALUES('278','698');
INSERT INTO PANDUAN(A,B) VALUES('4530','228');
COMMIT;
查詢實驗資料
SELECT * FROM PANDUAN;
3、判斷兩欄位大小,保留大的資料和小的資料,如下:
保留較大數
SELECT DECODE(SIGN(A-B),1,A,B) FROM PANDUAN;
保留較小數
SELECT DECODE(SIGN(A-B),-1 ,A,B) FROM PANDUAN;
小知識,簡而記之。
藍的成長記系列:
原創作品,出自 “深藍的blog” 部落格
藍的成長記——追逐DBA(2):安裝!安裝!久違的記憶,引起我對DBA的重新認知
藍的成長記——追逐DBA(3):古董上操作,資料匯入匯出成了問題
藍的成長記——追逐DBA(4):追憶少年情愁,再探oracle安裝
藍的成長記——追逐DBA(5):不談技術談業務,惱人的應用系統
藍的成長記——追逐DBA(8):重拾SP報告,回憶oracle的STATSPACK實驗
藍的成長記——追逐DBA(9):國慶漸去,追逐DBA,新規劃,新啟程
藍的成長記——追逐DBA(10):飛刀防身,熟絡而非專長:擺弄中介軟體Websphere
藍的成長記——追逐DBA(11):回家後的安逸,暈暈乎乎醒了過來
藍的成長記——追逐DBA(13):協調硬體廠商,六個故事:所見所感的“伺服器、儲存、交換機……”
藍的成長記——追逐DBA(14):難忘的“雲”端,起步的hadoop部署
藍的成長記——追逐DBA(15):以為FTP很“簡單”,誰成想一波三折
藍的成長記——追逐DBA(17):是分享,還是消費,在後IOE時代學會成長
藍的成長記——追逐DBA(18):小機上WAS叢集故障,由一次更換IP引起
藍的成長記——追逐DBA(19):路上的插曲:觸碰“框架”與“軟體系統”
其它篇章:
足球與oracle系列(1):32路諸侯點兵,oracle32程序聯盟 之A組巴西SMON程序的大局觀
足球與oracle系列(2):巴西揭幕戰預演,oracle體系結構雜談
足球與oracle系列(3):oracle程序排名,世界盃次回合即將戰罷!
足球與oracle系列(4):從巴西慘敗於德國,想到,差異的RAC拓撲對比!