笔者SQL语句报错,报错信息为:
[Err] 1292 - Truncated incorrect date value: '2023-11-14 10:42:54'
在经过一番百度和排查后找到报错产生的罪魁祸首是STR_TO_DATE函数,但还是一知半解,直到看到mysql - Data truncation: Truncated incorrect date value error - Stack Overflow,笔者再自己试验大概得到规律
STR_TO_DATE函数会根据输入字符串和格式字符串返回Date、Time、DateTime三种类型之一,如果输入字符串不完整,如:STR_TO_DATE('2023','%Y') ,函数会先决定返回的类型,再将空的位置置0,得到的结果如下图
这是能百度到的一些帖子内容,但是,这种情况下并不会有什么影响,能Insert进表,正常情况下也基本不会有这种业务
如果是插入字符串与格式字符串格式不对的情况下,Select语句无影响,Insert会直接报错!而且就是题主碰到的报错信息
并且这种场景相对来说更容易出现,如题主的取年月日
解决:
1.这个报错其实说法不严谨,因为这并不是error,而是warning,因此可以通过在Insert后加ignore来忽略这个警告
2.或者将输入字符串格式改为与格式字符串一致就可以解决这个警告,通过截取函数很容易就能做到这点
速记只会记录遇到的BUG,出现的规律和对应的解决办法,不追究原理,如果有明白的欢迎评论区留言交流