STR_TO_DATE() 函数是DATE_FORMAT() 函数的逆。它需要一个字符串str 和一个格式字符串格式。
STR_TO_DATE() 如果格式字符串包含 both 日期和时间部分,则返回 DATETIME 值;如果字符串包含 only,则返回 DATE 或 TIME 值strong> 日期或时间部分。
如果从str 中提取的日期、时间或日期时间值非法,则STR_TO_DATE() 返回NULL 并产生警告。
服务器扫描str 尝试以匹配格式。格式字符串可以包含文字字符和以% 开头的格式说明符。 必须 格式的文字字符与str 中的文字完全匹配。 必须格式的格式说明符与str 中的日期或时间部分匹配。
而且,得到零的原因是未指定的日期或时间部分的值是 0,因此str 中未完全指定的值会产生设置部分或全部部分的结果为 0,例如:
mysql> SELECT STR_TO_DATE('abc','abc');
-> '0000-00-00'
mysql> SELECT STR_TO_DATE('9','%m');
-> '0000-09-00'
mysql> SELECT STR_TO_DATE('9','%s');
-> '00:00:09'
检查您的查询使用哪种格式进行日期/时间匹配,并确保您的数据库行包含字符串,这些字符串可以转换为日期,并且不要将函数的输出值分配给相同的数据库字段:
SELECT
FirstDisplayedDate,
STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') AS Converted
FROM product
Here 和here 是更多关于如何正确使用该功能的信息。