【背景】
某部委項目,獲得到某收集端某類數據,需配合開發完成數據的抽取、清洗工作。其中有1類字典類字段,由于收集端數據問題,對字典類的數據內容出現大量問題數據需要清洗,把字典值翻譯成中文名稱提供給開發使用,舉個例子以下:
假定字典列表以下:
遇到問題1:如何進行翻譯?
把A1翻譯成“消防車”,把B1翻譯成“警車”,把C1翻譯成“大貨車”。
遇到問題2:如何將翻譯后結果更美觀易讀?
將翻譯后結果由“消防車,警車,大貨車,”轉換成“消防車,警車,大貨車”,即去掉翻譯后的最后1個逗號。
【解決】
解決1:利用笨方法:replace翻譯;
由于本次需翻譯字典項不多,斟酌到編寫函數的繁瑣性,因而想利用1個replace的笨方法來解決,起初擔心效力問題,但實踐后發現用replace套了19層后,轉換效力上還可以接受。
解決2:利用substr和instr函數;
由于利用replace簡單翻譯時,加入了逗號進行種別間的分割,這樣將在最后出現1個過剩的逗號。需要利用instr查詢出最后1個逗號所在的位數,然后再利用substr截取到倒數第2位便可。
弊端:
如果不寫函數的話,實現問題1和問題2時,將發起兩次replace轉換,本錢變成了2倍。所以建議利用函數,把replace后的結果作為變量進行傳遞,減少本錢消耗。
【實驗】
步驟1:
select replace(replace(‘A1B1’,’A1’,’消防車,’),’B1’,’警車,’) from dual;
select replace(replace(‘B1A1’,’A1’,’消防車,’),’B1’,’警車,’) from dual;
步驟2:
select substr(‘消防車,警車,’,1,instr(‘消防車,警車,’,’,’,⑴)⑴) from dual;
select substr(‘警車,消防車,’,1,instr(‘警車,消防車,’,’,’,⑴)⑴) from dual;
結合步驟1和步驟2:
select substr(replace(replace(‘A1B1’,’A1’,’消防車,’),’B1’,’警車,’),1,instr(replace(replace(‘A1B1’,’A1’,’消防車,’),’B1’,’警車,’),’,’,⑴)⑴) from dual;
select substr(replace(replace(‘B1A1’,’A1’,’消防車,’),’B1’,’警車,’),1,instr(replace(replace(‘B1A1’,’A1’,’消防車,’),’B1’,’警車,’),’,’,⑴)⑴) from dual;
小知識,簡而記之。
藍的成長記系列_20151022
原創作品,出自 “深藍的blog” 博客,歡迎轉載,轉載時請務必注明出處(http://blog.csdn.net/huangyanlong)。
藍的成長記――追逐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):7天7收獲的SQL
藍的成長記――追逐DBA(13):調和硬件廠商,6個故事:所見所感的“服務器、存儲、交換機……”
藍的成長記――追逐DBA(14):難忘的“云”端,起步的hadoop部署
藍的成長記――追逐DBA(15):以為FTP很“簡單”,誰成想1波3折
藍的成長記――追逐DBA(16):DBA也飲酒,被捭闔了
藍的成長記――追逐DBA(17):是分享,還是消費,在后IOE時期學會成長
藍的成長記――追逐DBA(18):小機上WAS集群故障,由1次更換IP引發
藍的成長記――追逐DBA(19):路上的插曲:觸碰“框架”與“軟件系統”
藍的成長記――追逐DBA(20):何故緣起,建庫護航