如何提取Oracle库表记录中的中文字符
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何提取Oracle库表记录中的中文字符
今日头条没事儿唠唠IT 2016-12-01 00:17
在最近做的一个项目中,需要将数据库表中的中文字符提取出来,以供业务人员二次处理。网上搜索一番后,采用Oracle数据库的ASCII函数解决问题。主要思路整理如下:
由于中文字符的ASCII码范围为45217至63486之间,因此可以此为切入点对目标字符串进行判断截取。编写函数如下:
create or replace function getCNStr(str varchar2)
return varchar2 is
tmpStr varchar2(100); --临时变量
currentStr varchar2(10); --当前待判断处理的字符
asciiCode number; --当前待怕短处理字符的Ascii码
counts number; --字符串中的字符个数
i_loop number := 1; --循环变量
resultStr varchar2(200); --返回的结果字符串
begin
--取出待处理字符串的长度(counts)
select length(str) into counts from dual;
--根据待处理字符串长度(counts),逐个字符判断处理
while i_loop <= counts loop
currentStr := substr(str, i_loop, 1);
select ASCII(currentStr) into asciiCode from dual; if asciiCode >= 45217 then
tmpStr := tmpStr || currentStr;
end if;
if asciiCode <= 45216 then
--非连续的中文字符串之间以空格隔开
tmpStr := tmpStr || ' ';
end if;
i_loop := i_loop + 1;
end loop;
resultStr := tmpStr;
return(resultStr);
end getCNStr;
至此,函数编写完成,编译后测试如下图:
有图有真相(哈哈)
经测试,此种方法虽然可解决一般的中文提取问题,但在大数据量的情况下,其执行效率的确不怎么高,还有待研究更加高效优化的方法。