在做数据治理过程中,客户的数据“脏”到什么地步,是无法想象的!尤其很多集团型客户在发展过程中因前期对各子公司没有设定数据标准,因此出现“各按各自套路做事”的情况很多,并且各子公司的信息化能力不一,因此在当客户做数据归集治理时会收集到很多“脏”数据,给承建公司做信息化治理带来很多麻烦。
比如,一张“商品生产表”如下:
如果需求是要在可视化页面展示“年-月-日”或者“年-月-日 时:分:秒”这种形式,怎么办?
从肉眼看上去很明显,“2025-11-21”和“2025-11-21 14:53:52”两条数据符合,其它都要过滤掉。但是生产环境数据是成千上万的,问题数据也只是少数,不可能人工肉眼去看。处理这种数据很多人首先想到的办法就是写个自定义函数,在函数里将字日期字符串进行拆解判断,然后在sql语句的where后面调用函数去过滤,如:
select * from table where func(RQ) =1;
这种方法虽然可行,但有弊端:1.需要有函数功底,且编写费时费力;2.每条数据都会经过自定义的函数逻辑,数据量大时执行极慢。
那有什么办法呢?其实也要用到函数,不过这个函数执行数据很快,它就是ISDATE函数,这是用来判断字符串是否是时间的函数。我们来看效果:
的确将哪些带字母或者特殊字符的数据给过滤掉了,但这还不够,像2025-11-21 14:53:521、2025-11-21 14:532:521等还没有过滤,因为ISDATE函数将这些也视为时间了,怎么办?
既然系统将它们认为是时间,那肯定能将它们由字符串转成时间,这时候我想到了CONVERT函数(字符串转时间)。首先我们看看:
发现规律了,CONVERT函数对字符串转换成时间时自动进行了取舍,取舍之后“看起来”和原来不太一样了!那就好办了,就按照这个“看起来不一样”出发,将取舍后的时间重新转换成字符串,然后和原来的字符串进行对比,不一样的过滤掉,一样的就留下,不就过滤了?如下:
这样,就完成了按需过滤。
总结:不同数据库语法有时候要巧妙结合起来用。
文章
阅读量
获赞
