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

如何在MySQL中从Sunday 6th July 2008提取2008-07-06格式日期?

解决MySQL日期格式转换问题:从Sunday 6th July 2008到2008-07-06

嘿,我来帮你搞定这个日期转换的问题~你之前的两个语句返回null,是因为对STR_TO_DATE和DATE_FORMAT的用法理解有点偏差,我来拆解一下:

为什么原来的语句会返回null?

  • SELECT STR_TO_DATE('Sunday 6th July 2008','%Y-%m-%d'):STR_TO_DATE的第二个参数是用来描述源字符串的格式,而不是你想要输出的格式。你这里把目标格式当成了源格式,MySQL没法解析,自然返回null。
  • SELECT DATE_FORMAT('Sunday 6th July 2008','%Y-%m-%d'):DATE_FORMAT的第一个参数必须是日期/日期时间类型的值,你传入的是普通字符串,MySQL无法识别为日期,所以返回null。

正确的解决方法

我们需要分两步走:先用STR_TO_DATE把源字符串解析成MySQL能识别的日期类型,再用DATE_FORMAT把它转成你想要的YYYY-MM-DD格式。

MySQL的格式符里刚好有匹配你源字符串的规则:

  • %W:匹配完整的星期名称(比如Sunday)
  • %D:匹配带后缀的日期(比如6th)
  • %M:匹配完整的月份名称(比如July)
  • %Y:匹配4位数字的年份(比如2008)

所以完整的SQL语句是:

SELECT DATE_FORMAT(STR_TO_DATE('Sunday 6th July 2008', '%W %D %M %Y'), '%Y-%m-%d');

执行这个语句后,就会返回你想要的结果:2008-07-06。

如果你想单独验证第一步的解析结果,可以先执行:

SELECT STR_TO_DATE('Sunday 6th July 2008', '%W %D %M %Y');

它会返回MySQL的默认日期格式值(本质是日期类型),再套上DATE_FORMAT就能输出你指定的格式啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:34:12