目录
在早期的OA建设中,主要是为了让流程跑的通畅,很少去考虑后期的数据分析的需求,比如我们需要获取领导审批通过的日期,但是日期是在一堆意见里面。因组织架构的问题,同一个领导的意见会包含多条记录,即多个审批日期,这时候我们需要去获取最后一个审批日期作为审批日期。下面我们先来看看现实的数据是怎么样的吧。其中打码的都是人名哈。


从图片我们可以看到,里面包含了汉字、回车和换行符,下面详细说说怎么去处理吧。
2、代码- select '【同意】 可以先调试
- 小明 2021-10-01 07:52
- ' old,trim(regexp_replace('【同意】 可以先调试
- 小明 2021-10-01 07:52
- ','['||chr(128)||'-'||chr(255)||']','')) nnew FROM DUAL
实现的逻辑具体可参考我以前写的一篇博客介绍。
oracle替换字符串中的中文_他们叫我技术总监的博客-CSDN博客_oracle替换中文字符
通过上面的方法部分数据能满足我们的分析需求,但是我们会发现,当意见里面出现非汉字的时候,就会和日期一起展示,同时里面还存在很多换行符。如下图所示。
![]()


如上图所示去掉汉字的字符串,存在多个日期和其他非英文字符的问题。同时里面还有大量的换行和回车符。话不多说直接上效果吧。

- select FIELD0065 原始数据,
- trim(regexp_replace(FIELD0065,'['||chr(128)||'-'||chr(255)||']','')) 第一次处理,
- substr(trim(replace(replace(trim(regexp_replace(FIELD0065,'['||chr(128)||'-'||chr(255)||']','')),CHR(10),''),chr(13),'')),-16,10) 第二次处理后
- from BI.Oa_51me_Zb where FIELD0065 is not null
- ---使用时替换表名BI.Oa_51me_Zb和字段名FIELD0065即可
通过replace+CHR(10)+chr(13)去掉了回车和换行符。然后通过trim去掉里面的空格,再通过substr函数从最后16位的位置截取10为长度的字符串作为审批日期。
本文主要用来分享项目上遇到的小问题,同时在自己再次遇到的时候可以用来查看,快速解决问题,希望本次文章对你有空,也欢迎留言讨论其他更优解哦~