MySQL中DATE_FORMAT转换日期返回NULL 如何将31-Mar-2022转为2022-03-31
问题原因
语句返回NULL是因为DATE_FORMAT()函数的第一个参数必须是MySQL可识别的DATE/DATETIME类型值,直接传入"31-Mar-2022"格式的字符串时,MySQL无法自动将其解析为合法日期,因此返回空值。
正确写法
需要先通过STR_TO_DATE()函数把原始格式的字符串解析为合法日期,再做格式转换:
SELECT DATE_FORMAT(STR_TO_DATE('31-Mar-2022', '%d-%b-%Y'), '%Y-%m-%d');
相关说明
- 解析原始字符串用到的格式符:
%d对应两位数字日期、%b对应英文缩写月份名、%Y对应四位数字年份 - 输出目标格式用到的格式符:
%Y-%m-%d对应四位年-两位月-两位日的标准日期格式 - 如果执行时出现月份解析失败的问题,可以先执行
SET lc_time_names = 'en_US';把时间语言设置为英文,保证缩写月份能被正常识别
执行上述语句后即可得到2022-03-31的目标结果。
内容的提问来源于stack exchange,提问作者Bisoux
相关产品推荐
相关产品推荐

