如何提取Oracle库表记录中的中文字符

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

至此,函数编写完成,编译后测试如下图:

有图有真相(哈哈)

经测试,此种方法虽然可解决一般的中文提取问题,但在大数据量的情况下,其执行效率的确不怎么高,还有待研究更加高效优化的方法。

相关文档
最新文档