龙空技术网

技术栈|"0000-00-00"日期格式你是认真的么?

希嘉工程师 570

前言:

现在朋友们对“oracle格式化日期去掉时分秒”大体比较重视,大家都需要了解一些“oracle格式化日期去掉时分秒”的相关文章。那么小编在网摘上汇集了一些有关“oracle格式化日期去掉时分秒””的相关知识,希望我们能喜欢,各位老铁们一起来了解一下吧!

技术栈|"0000-00-00"日期格式你是认真的么?浅谈日期类型数据质量问题

数据中心经常会接触到各类时间日期的数据,有时可能为DATE型、有时可能为VARCHAR型。而不管是什么格式类型的数据,在同步的时候会涉及到入库和格式转换。但你碰到过"0000-00-00"格式的数据么 ?

此类数据明显有问题,因为ORACLE是不会允许年份、日期、时间出现0的情况。而且如果通过ETL工具查询或抽取时都会报错,

既然ORACLE不允许存放"0000-00-00"这样的数据,那么此问题真实的原因是什么?

通过对比业务系统此数据的状态,我们终于知道了此日期是"5589-06-10"。此错误数据在前端程序往数据库中插入的时候发生了错误,导致数据库中出现了一条违背常识的"0000-00-00"。那么此问题真实的原因,是在于业务系统对于DATE格式的数据在录入的时候没有校验机制,造成数据库中存放了错误格式的数据,而此数据在涉及到查询、ETL等过程中必定会抛出一个ORA-01847的错误。

问题找到了,但是如何解决呢?一方面我们需要联系业务系统厂商解决前端程序对日期格式数据的校验问题,一方面还可以在数据同步时,通过"邪道"解决。

例如利用CASE WHEN函数做一个简单的判断,把所有含"0000"的数据,统一定义为"0001-01-01"这样一个"貌似"正确的数据,其他格式正确的数据正常输出。这样既保证了数据同步的及时性,也方便后期针对问题数据进行集中处理。

在ETL过程中,我们会碰到各种各样的"奇葩"问题,但只要认真、细致,问题还是可以解决。"搞数据",我们是认真的!

标签: #oracle格式化日期去掉时分秒 #oracle将数字转换成日期 #oracle时间格式只取年份 #oracle如何查找数据的入库时间 #oracle查看数据时间格式