You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL DATE_FORMAT处理无效日期报错,需将无效值置为NULL的问题

解决MySQL更新无效日期字符串时的报错问题

问题原因

MySQL开启严格SQL模式(如STRICT_TRANS_TABLES)时,即便单独执行DATE_FORMAT('test', '%W %M %Y')会返回NULL,但在UPDATE语句中,MySQL会优先校验输入值的日期合法性,发现'test'这类无效日期字符串后,会抛出[22001][1292]数据截断错误,而非直接将NULL赋值给字段。

解决方法

利用STR_TO_DATE()函数验证字符串是否为有效日期(转换失败返回NULL),再通过条件逻辑将无效日期对应的value字段设为NULL:

直接批量更新无效日期值为NULL

UPDATE extras
SET `value` = NULL
WHERE STR_TO_DATE(`value`, '%W %M %Y') IS NULL;

保留有效日期格式化结果,无效日期设为NULL

如果需要将合法日期按指定格式转换后保留,仅把无效日期设为NULL,可以用CASE WHEN实现:

UPDATE extras
SET `value` = CASE
    WHEN STR_TO_DATE(`value`, '%W %M %Y') IS NOT NULL
    THEN DATE_FORMAT(STR_TO_DATE(`value`, '%W %M %Y'), '%W %M %Y')
    ELSE NULL
END;

注意事项

不要为了规避报错关闭严格SQL模式,严格模式能有效拦截非法数据,保证数据的完整性和准确性。

内容的提问来源于stack exchange,提问作者reans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:25:32