str_to_date处理有效日期时返回NULL的问题排查
问题解决:MySQL日期转换返回NULL的原因及修复
核心问题
你收到的#1411警告正是导致转换失败返回NULL的直接原因。你的日期字符串是9/9/2024 12:00:00 AM,其中月份和日期为单数字格式,但你在str_to_date中使用的%m和%d格式符要求输入必须是两位数字(带前导零),格式不匹配导致解析失败,最终返回NULL。
修复方案
将格式符中的%m(强制两位月份)替换为%c(支持单/双位月份,无强制前导零),%d(强制两位日期)替换为%e(支持单/双位日期,无强制前导零)。修正后的查询如下:
SELECT `dateColumn`, CASE WHEN TRIM(`dateColumn`) = '' THEN NULL ELSE DATE_FORMAT(STR_TO_DATE(`dateColumn`, '%c/%e/%Y %h:%i:%s %P'), '%Y-%m-%d') END AS 'NEW DATE' FROM `table` WHERE `EmailAddress` = 'myemail@yahoo.com';
补充说明
- 新增
TRIM()是为了处理可能存在的空白字符串(比如仅含空格的无效值),避免误判为非空值进行转换。 - 把
%H替换为%h是更严谨的写法:%h对应12小时制格式,搭配%P(AM/PM标识)能更准确解析12小时制的时间字符串。
内容的提问来源于stack exchange,提问作者John Beasley
相关产品推荐
相关产品推荐

