MySQL 8.0.35中STR_TO_DATE用周数指令返回NULL问题咨询
问题解答
是否是Bug?操作有误吗?
这是MySQL 8.0.35版本的已知Bug,你的操作完全没有问题。
按照官方文档描述,STR_TO_DATE确实是DATE_FORMAT的逆函数,应当能还原DATE_FORMAT输出的日期字符串,但在8.0.35版本中,当格式符包含周数指令(%U、%u、%V或%v)时,STR_TO_DATE会返回NULL,无法正常解析。
可行的解决办法
1. 升级MySQL版本
MySQL官方已经在8.0.36及后续版本修复了这个问题,升级到对应版本后,你的原有代码就能正常工作。
2. 临时替代方案(无法升级时)
如果暂时不能升级版本,可以通过手动计算的方式还原日期,利用MAKEDATE和日期间隔函数来实现:
SET @_NOW=NOW(6), @_FMT='%YW%U'; SELECT @_NOW,@_FMT, DATE_FORMAT(@_NOW,@_FMT) AS `formatted`, -- 针对%U(周日为一周起始)的修复方案 MAKEDATE(YEAR(@_NOW), 1) + INTERVAL (DATE_FORMAT(@_NOW,'%U') - 1) WEEK + INTERVAL WEEKDAY(@_NOW) DAY AS `parsed_fix`;
如果使用的是%u(周一为一周起始),只需要调整星期偏移的计算:
-- 针对%u(周一为一周起始)的修复方案 MAKEDATE(YEAR(@_NOW), 1) + INTERVAL (DATE_FORMAT(@_NOW,'%u') - 1) WEEK + INTERVAL (WEEKDAY(@_NOW) + 1) % 7 DAY AS `parsed_fix`;
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

