如何在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
相关产品推荐
相关产品推荐

