项目场景:
这个项目是一个老项目,外包出去的,导致开发很多地方不是很注意细节。有个日期类型的字段竟然设计成Integer类型,这样就容易导致一些奇怪的问题。
问题描述:
开发过程中,遇到一个SQL,执行时报错“无效的月份”,查看了这个文件的提交记录,发现这个文件上次修改还是半年之前,说明不是SQL的问题。那就是数据问题。
原因分析:
初步分析这个应该日期问题,因为SQL中有个函数to_date(),很可能是数据格式。
在把所有的lr_date字段替换成null以后,发现SQL可以查出数据,这就进一步验证了我们的猜想。是日期的问题。
首先,我们怀疑日期这个字段可能是存在特别大的数或者是特别小的数,发现并没有。
然后又陷入了沉思。
最后怀疑是不是这个字段中存在一些非常规的数据,比如月份只有1到12,会不会这个月份出现了其他的数据。
为了验证这个猜想,用 substr(a, 6, 2) 切割字段,把月份截取出来,找出substr(a, 6, 2) > 12 的数据。
最后找到问题。就是有条数据为20211301,导致这个问题。
解决方案:
把异常数据的日期改成正常值即可。