使用MySQL 5.7,它假设从表示四位数年份和两位数月份的字符串转换,中间没有任何其他字符。
例如,运行以下语句
SELECT str_to_date('202105','%Y%m');
返回内容:160101
是1601年1月,而不是2021年5月。考虑到原因中的功能,所需的论点似乎是正确的。
我无法在DBFiddle上重现您的确切结果,但我确实看到它创建了一个null
,而不是预期日期。你可以做的是附加一个"01"来获得更好的日期文字:
SELECT str_to_date(concat('202105', '01'),'%Y%m%d');
点击此处查看:
https://www.db-fiddle.com/f/sbArVsLF6BVDGSrYdy8geP/0
您还需要指定日期,否则它将无法在MySQL 8.0+中工作。
您需要指定日期的所有部分,即年、月和日,以便功能正常运行。
# Incorrect Code:
SELECT str_to_date('202105','%Y%m');
# Correct Code:
SELECT str_to_date('20210501','%Y%m%d');
输出
2020-05-01
参考编号:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-迄今