2017-10-17 146 views
1

我试图将字符串更改为时间格式,但在我的数据库配置中似乎出现了一些问题。因为当我尝试下面的查询它给我空作为回报日期格式问题STR_TO_DATE('18:11:52','%H:%i:%s')返回NULL

mysql> select STR_TO_DATE('18:11:52', '%H:%i:%s'); 
+-------------------------------------+ 
| STR_TO_DATE('18:11:52', '%H:%i:%s') | 
+-------------------------------------+ 
| NULL        | 
+-------------------------------------+ 
mysql> show warnings; 
+---------+------+---------------------------------------------------------------+ 
| Level | Code | Message              | 
+---------+------+---------------------------------------------------------------+ 
| Warning | 1411 | Incorrect datetime value: '18:11:52' for function str_to_date | 
+---------+------+---------------------------------------------------------------+ 

但是,当我在另一个Mysql服务器尝试相同的查询它会很好。必须有一些配置问题。 我很感激任何人都可以提供帮助。提前致谢。

+1

奇怪。我发现它在MySQL 5.5中工作,但不在5.7中。 –

+0

看起来像一个错误。 –

+0

仅供参考,你的声明适用于MySQL 5.6。我想知道你的配置中是否有不同的东西。是否有机会添加'show variables like'sql_mode“;'我看到在mysql文档中至少有一个基于sql_mode的gatcha的输出https://dev.mysql.com/doc/refman/5.7 /en/date-and-time-functions.html#function_str-to-date –

回答

3

这意味着你必须启用NO_ZERO_DATENO_ZERO_IN_DATE SQL模式,所以MySQL不会让你一个时间字符串转换为0000-00-00为datetime隐式日期。

由于您输入的数值实际上是一个时间字符串(不是一个日期),它可能会更有意义,为您使用CONVERT()功能,像这样:

SELECT CONVERT('18:11:52', TIME); 
+0

谢谢你的工作。 –

+0

@FaizanYounus你应该接受答案,如果它解决了问题。 – Barmar

+0

是的,我做了@Barmar –