1.问题场景
接收了一个老项目,其中有个时间字段为string类型,我现在要判断这个时间。选择得方法是用STR_TO_DATE()函数。测试服务器上没问题,生产上却没起作用。
<if test= "graduateStart != null and graduateStart != ''">
and DATE_FORMAT(STR_TO_DATE(e.end_date,'%Y'),"%Y") <![CDATA[ >= ]]> #{graduateStart}
</if>
<if test= "graduateEnd != null and graduateEnd != ''">
and DATE_FORMAT(STR_TO_DATE(e.end_date,'%Y'),"%Y") <![CDATA[ <= ]]> #{graduateEnd}
</if>
2.原因
测试服务器上的MySQL与生产上的不同。查看一下sql_mode
SELECT @@sql_mode;
结果:
测服
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
生产
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_