1. 程式人生 > >資料清洗小記(15):DECODE利用sign函式做大小值判斷

資料清洗小記(15):DECODE利用sign函式做大小值判斷

【背景】
對某業務資料處理時,需要判斷兩個資料欄位的大小,保留較大的資料存入到指定欄位下面。考慮使用decode函式和sign函式來實現這個目的。

【解決】

1、decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值)
2、sign()函式:根據某個值是0、正數、負數,分別返回01、-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(1):奔波於路上,挺進山東

藍的成長記——追逐DBA(2):安裝!安裝!久違的記憶,引起我對DBA的重新認知

藍的成長記——追逐DBA(3):古董上操作,資料匯入匯出成了問題

藍的成長記——追逐DBA(4):追憶少年情愁,再探oracle安裝

藍的成長記——追逐DBA(5):不談技術談業務,惱人的應用系統

藍的成長記——追逐DBA(6):做事與做人:小技術,大為人

藍的成長記——追逐DBA(7):基礎命令,地基之石

藍的成長記——追逐DBA(8):重拾SP報告,回憶oracle的STATSPACK實驗

藍的成長記——追逐DBA(9):國慶漸去,追逐DBA,新規劃,新啟程

藍的成長記——追逐DBA(10):飛刀防身,熟絡而非專長:擺弄中介軟體Websphere

藍的成長記——追逐DBA(11):回家後的安逸,暈暈乎乎醒了過來

藍的成長記——追逐DBA(12):七天七收穫的SQL

藍的成長記——追逐DBA(13):協調硬體廠商,六個故事:所見所感的“伺服器、儲存、交換機……”

藍的成長記——追逐DBA(14):難忘的“雲”端,起步的hadoop部署

藍的成長記——追逐DBA(15):以為FTP很“簡單”,誰成想一波三折

藍的成長記——追逐DBA(16):DBA也喝酒,被捭闔了

藍的成長記——追逐DBA(17):是分享,還是消費,在後IOE時代學會成長

藍的成長記——追逐DBA(18):小機上WAS叢集故障,由一次更換IP引起

藍的成長記——追逐DBA(19):路上的插曲:觸碰“框架”與“軟體系統”

藍的成長記——追逐DBA(20):何故緣起,建庫護航

其它篇章:

足球與oracle系列(1):32路諸侯點兵,oracle32程序聯盟 之A組巴西SMON程序的大局觀

足球與oracle系列(2):巴西揭幕戰預演,oracle體系結構雜談

足球與oracle系列(3):oracle程序排名,世界盃次回合即將戰罷!

足球與oracle系列(4):從巴西慘敗於德國,想到,差異的RAC拓撲對比!

足球與oracle系列(5):fifa14遊戲缺失的directX庫類比於oracle的rpm包!

足球與oracle系列(6):伴隨建庫的亞洲盃——加油中國隊