产生这个错误的原因是在使用convert函数将给定的日期字符串转换为日期类型的时候,因为datetime这个数据类型有时间数值的范围限定,当超出时间范围时就抛出这个错误。
如果类型是【datetime】数据类型:最大是9999年12 月31日,最小是1753年1月1日。
如果类型是【smalldatetime】数据类型:最大值是2079年6月6日,最小值是1900年1月1日。
更多的,如果给定的日期字符串是一个错误的日期,也会报出这个错误,比如说:
select convert(datetime, '2018-11-31', 20); -- 报错
看出问题来了嘛?11月份怎么会有31天呢,因为31天超出了11月份30天的范围,因此就会报这个【从varchar数据类型到datetime数据类型的转换产生一个超出范围的值】的错误。
我遇过现场客户给出【2015-09-38】的数据,排查半天才发现这个问题,真是让人头大。
"你现在多学一样本事,就能在以后少说一句求人的话。"