【背景】
某部委项目,获得到某收集端某类数据,需配合开发完成数据的抽取、清洗工作。其中有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):何故缘起,建库护航