病毒安全知识,电脑网络技术,手工杀毒方法,答疑解决笔记

导航

« 我的武术世界观电脑开不了机,我不知道原因,但知道怎么做 »

Oracle使用translate函数消除特殊符号

新一天有新的问题,每解决一个问题,就会获得新的知识。最近有一个需求,需要在Oracle查询结果中去除表数据中含有的特殊符号,如回车符、换行符等,因为当这些数据导出形成报文时,特殊符号可能导致诸如读取错误这样的问题。

刚开始走了点弯路,过于相信AI的搜索与推理,结果一直出来的是空值,AI还一个劲给我解释,拼命让我相信我原来的字段就是空。不过后来终于知道怎么处理了,就记录下来。

Oracle的替换函数可以用replace,不过它是针对字符串进行的整体替换,而我消除的特殊符号有多个,一个一个处理再麻烦,而translate则可以按字符进行一一对应的替换。如

select translate('abcdefac','ac','xy') from dual;

得到的结果是'xbydefxy',就是将源字段中所有的a->x,b->y,按字符逐一替换,即使它们不相邻。如果要替换成的字符数少于被替换字符,比如

select translate('abcdefac','acd','xy') from dual;

a->x,c->y,d没有对应的替换对象,就按空值替换,等于删除d。

如果是用replace函数,replace('abcdefa','ac','xy'),则只会得到'abcdefxy','ac'是当成一个整体处理,替换的是整个ac字符串,就是只有相邻的ac才被换成xy,前面不相邻的'abc'中的ac不会被替换。

现在来操作特殊符号,在Oracle中回车符是CHR(13)、换行符是CHR(10),其它特殊符号这里就不列了,就以上面两个符号为例,

select translate(string,'@'||chr(10)||chr(13),'@') from dual;

其中,string是要处理的字段值,然后就是替换的字符,@->@、chr(10)->''、chr(13)->'',就是把所有的回车和换行符都替换成空(''),就是删除这两种特殊符号。至于前面为什么要加一个@的替换(实际没有变,还是@),如果只写下面这样:

select translate(string,chr(10)||chr(13),'') from dual;

最早开始我就是这么写的,结果只能得到一个空值NULL,不能实现消除特殊符号的目的,全被删除了,因此要在最前面加一个非空的替换字符,不一定只能是@,可以是要处理字段中的字符,只要替换成自身就不影响,或者是处理字段以外的字符,反正不会搜索到,换成什么也不影响原值。

以上就是Oracle中translate函数的用法,不过最后我并没有用上这个方法在Oracle中过滤提取数据或限制输入数据,而是在应用程序层面进行检测与限制。 


>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/2345.html

发表评论(无须注册,所有评论在审核通过后显示):

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  • 微信订阅号
    微信订阅

最新发表

最新评论及回复

本站出现的所有广告均不代表本人及本站观点立场 | 关于我 | 网站地图 | 联系邮箱 | 返回顶部
Copyright 2008-2020 www.stormcn.cn. All Rights Reserved. Powered By Z-Blog.

闽公网安备 35010202000133号