前言:
在早期的OA建设中,主要是为了让流程跑的通畅,很少去考虑后期的数据分析的需求,比如我们需要获取领导审批通过的日期,但是日期是在一堆意见里面。因组织架构的问题,同一个领导的意见会包含多条记录,即多个审批日期,这时候我们需要去获取最后一个审批日期作为审批日期。下面我们先来看看现实的数据是怎么样的吧。其中打码的都是人名哈。
从图片我们可以看到,里面包含了汉字、回车和换行符,下面详细说说怎么去处理吧。
一、去掉字符串里面的汉字
1、效果
2、代码
select '【同意】 可以先调试 小明 2021-10-01 07:52 ' old,trim(regexp_replace('【同意】 可以先调试 小明 2021-10-01 07:52 ','['||chr(128)||'-'||chr(255)||']','')) nnew FROM DUAL
3、解析
实现的逻辑具体可参考我以前写的一篇博客介绍。
二、去掉换行和回车符,倒叙截取需要日期
通过上面的方法部分数据能满足我们的分析需求,但是我们会发现,当意见里面出现非汉字的时候,就会和日期一起展示,同时里面还存在很多换行符。如下图所示。
如上图所示去掉汉字的字符串,存在多个日期和其他非英文字符的问题。同时里面还有大量的换行和回车符。话不多说直接上效果吧。
1、效果
2、代码
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即可
3、解析
通过replace+CHR(10)+chr(13)去掉了回车和换行符。然后通过trim去掉里面的空格,再通过substr函数从最后16位的位置截取10为长度的字符串作为审批日期。
三、总结
本文主要用来分享项目上遇到的小问题,同时在自己再次遇到的时候可以用来查看,快速解决问题,希望本次文章对你有空,也欢迎留言讨论其他更优解哦~