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

MySQL STR_TO_DATE格式化返回NULL问题排查求助

问题分析与解决方法

我来帮你排查这个问题——你的查询返回全NULL的核心原因是格式符和你拼接的字符串类型完全不匹配,具体来说:

  • MONTH(date) 函数返回的是数字形式的月份(比如4对应4月,12对应12月),而你使用的格式符 %M 是用来匹配英文全称的月份名称(比如April、December)的。两者类型不兼容,STR_TO_DATE 无法解析,自然返回NULL。
  • 另外补充一点:即使你解决了格式符的问题,STR_TO_DATE 返回的是DATE类型,默认会显示成YYYY-MM-DD的完整日期格式(年份会取当前会话的默认值,比如当前年份),这和你想要的04-20字符串格式也不匹配。

正确的解决方法

根据你的预期(把2019-04-20转换成04-20的字符串格式),最直接高效的方式是使用DATE_FORMAT函数,不需要手动拼接和转换:

SELECT DATE_FORMAT(date, '%m-%d') FROM `subscriptions`;

这里的格式符说明:

  • %m:代表两位数字的月份(01-12,自动补前导零)
  • %d:代表两位数字的日期(01-31,自动补前导零)

如果一定要坚持用你原来的拼接思路(不推荐,因为多此一举),需要修正两个点:

  1. 把格式符换成匹配数字月份的%m(两位数字)或%c(一位数字)
  2. 给月份和日期补前导零,确保是两位数字格式:
SELECT STR_TO_DATE(
    CONCAT(LPAD(MONTH(date), 2, '0'), '-', LPAD(DAY(date), 2, '0')),
    '%m-%d'
) FROM `subscriptions`;

但注意这个查询返回的是DATE类型,会显示成YYYY-MM-DD(比如2024-04-20),如果要得到纯04-20的字符串,还是用DATE_FORMAT更合适。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:47:30