暂无图片
暂无图片
8
暂无图片
暂无图片
3
暂无图片

有意思的一次数据处理

原创 千寻 2022-03-01
1731

业务需求

简单说 根据多种业务规则 查询出核心库 MCR表里的合同有效期时间,然后跟征信库RC表的查询时间匹配,排查是否存在 MCR表合同有效期<征信库RC表的查询时间的日常数据

数据说明

场景1:直接传日期

合同有效期时间:直接取 credit_ret_msg字段的值


场景2:credit_ret_msg字段的值包含 【征信授权书】

合同有效期时间:取CRT_TM


场景3:credit_ret_msg字段的值包含 lastValidQueryTm

合同有效期时间:取lastValidQueryTm 后面的时间戳

图片

这时候 全量的 credit_ret_msg字段的值如下:

图片

那么我们需要实现什么呢?

将以上三种场景对应的 合同有效期时间都取出来并且+1年时间,根据cst_id 分组,取出最大的那个时间,与其他的表做关联更新,最后做个简单的>计算即可。

看到这里的同学,觉得简单的 不妨模拟下这个数据类型

credit_ret_msg 【 varchar2(4000)】 ,你会遇到以下两个大坑:


第一个坑:场景3的时间戳如何截取出来?

PS:论数据截取的艺术..


第二个坑:数据类型的处理 我们最终要的是日期类型,但是这三种场景最终的数据 分别是 日期 数值与 字符,那么如何获取我们想要的最终的值?

ps: 这就是基础的数据处理思维.


第三个坑:场景3的时间戳是 微秒级时间戳 没有现成的函数可以直接完成字段类型转换,需要写个函数处理,或者纯SQL计算也可。

PS: 是时候考验你的基本SQL功底了,哈哈


小坑就不赘述了 大佬基本几分钟搞定,让我们直接放答案:




涉及思路:

  1. V1表包含 数据截取 前后分别截取两次

  2. V2表计算汇总不同数据类型,分组取(期待有更好的答案)

  3. V2最终汇总使用自定义函数计算时间戳字段

  4. ORACLE给指定日期加1年


看似简单的SQL,三种场景的需求确认沟通都浪费了1天时间,实际完成也只花了2小时编写而已,论数据处理需求明确的重要性!

最终完美解决,后续问题数据排查需要深入业务排查代码设计逻辑,算是给研发同学开了个好头(知道BUG的研发眼泪流下来),嘿嘿。


附上小彩蛋:自定义函数 TIMESTAMP_TO_DATE

实现功能:时间戳转换为 年月日 时分秒日期字段:

函数创建语句:


最后修改时间:2022-03-01 17:17:14
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

11 0
暂无图片
1年前
评论
暂无图片 0
👍
1年前
暂无图片 点赞
评论
筱悦星辰
暂无图片
1年前
评论
暂无图片 0
SQL能力需要不断的进步学习
1年前
暂无图片 点赞
评论
墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论
目录
  • 场景1:直接传日期
  • 场景2:credit_ret_msg字段的值包含 【征信授权书】
  • 场景3:credit_ret_msg字段的值包含 lastValidQueryTm
  • 第一个坑:场景3的时间戳如何截取出来?
  • 第二个坑:数据类型的处理 我们最终要的是日期类型,但是这三种场景最终的数据 分别是 日期 数值与 字符,那么如何获取我们想要的最终的值?
  • 第三个坑:场景3的时间戳是 微秒级时间戳 没有现成的函数可以直接完成字段类型转换,需要写个函数处理,或者纯SQL计算也可。
  • 涉及思路:
    • 附上小彩蛋:自定义函数 TIMESTAMP_TO_DATE