【任务记录】清洗日期数据(将中文日期改成阿拉伯数字形式)

需求

对原始数据未做任何清洗,数据-company_member表的start_time格式异常

观察

start_time是varchar类型的数据,根据长度可以大概判断他的格式是否正确,先按照长度分组看一下总共有哪些长度,各有多少条

countlength
141
9802
22403
13024
2338285
70146
9070887
2550248
161149
24438145110
1419611
61612
374305713
5615
1416

因为我们需要的日期是“年+月+日”的形式,诸如长度为1和2的肯定不符合要求。为了进一步了解它格式上究竟发生了那些错误,我们同样按照长度查看具体数据的表现。

进一步观察

调用脚本进行校验:

返回的值如下所示:

 注意到只有红框中这三种类型的数据才能够正确校验。

清洗方法

根据上面的观察,我们可以注意到,长度小于等于8的start_time数据一定缺失了部分信息,是没有意义的,因此对于这部分数据,我们的处理规则是将其内容置换为null。

其次,对于‘二零零六年三月至二零一二年二月’这样的信息,有缺失也有多余,同样将其替换为null。识别这类数据的方法是对其中“至”这个字进行模糊匹配。

与此同时,还有一些诸如‘二零二三年一月十五日’这样的数据,信息没有缺失,但因为采取了汉语数字的表达方式,需要对其进行替换。

在一开始,我选择将“一”替换成“1”,“二”替换成“2”等等查看处理情况:

可以看到,这样处理的时候,没有将“十”替换掉,而如果我们简单的将“十”替换成“10”,结果将会变成这样:

 

更加奇怪了!!!

所以对于“十”要非常谨慎小心地处理,仔细研究的话,总共有以下几种情况:

  1. 二零二三年十月十号,这里的“十”需要原封不动替换成 “10”
  2. 二零二三年十二月十二号,这里的“十”需要替换成“1”
  3. 二零二三年八月三十号,这里的“十”需要替换成“0”
  4. 二零二三年一月二十二号,这里的“十”需要替换成“”,也就是空字符串

我在CSDN上查询了一些处理方法,但感觉都比较复杂,懒得仔细研究,所以我自己想了一个替换的方法,靠我自己暂时还没有找到逻辑漏洞,所以就先放上来。

具体如下:

  1. 针对上述第一种情况,我们精准识别 “二零二三年十月十号”、“二零二三年十月十号”中的“年十月”、“月十号”将其中的“十”替换成“10”
  2. 针对上述第二种情况,我们精准识别“二零二三年十月十二号”中的“年十”、“月十”(注意这这一步处理一定要在第一步之后,这样的话所有十月、十号的数据已经被替换掉,不会造成误伤)替换成“1”
  3. 针对上述第三种情况,我们精准识别“二十号”“三十号”将其中的“十”替换成“0”
  4. 针对上述第四种情况,因为这样的只有可能是“二十X号”和“三十一号”,我们识别“二十”“三十”(注意这这一步处理一定要在第三步之后,这样的话所有“二十号”“三十号”的数据已经被替换掉,不会造成误伤)将其中的“十”替换成“"

也就是在replace条件中加上以下几项:

观察数据可知,没有什么太大的问题 

 然后在用脚本对他们进行校验即可

 

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值