2017-08-30 68 views

回答

0

你的日期值是无效的,像“2005-03-00 ”。

如果STR_TO_DATE()无法将日期计算为合法日期,则返回NULL。

mysql> select str_to_date('2005-03-00', '%Y-%m-%d'); 
+---------------------------------------+ 
| str_to_date('2005-03-00', '%Y-%m-%d') | 
+---------------------------------------+ 
| NULL         | 
+---------------------------------------+ 

如果您尝试使用真实日期,STR_TO_DATE()可以正常工作。

mysql> select str_to_date('2005-03-01', '%Y-%m-%d'); 
+---------------------------------------+ 
| str_to_date('2005-03-01', '%Y-%m-%d') | 
+---------------------------------------+ 
| 2005-03-01       | 
+---------------------------------------+ 

因此,垃圾进入,垃​​圾出来。

手册(https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_str-to-date)部分说:

如果启用了NO_ZERO_DATE或NO_ZERO_IN_DATE SQL模式,零日期或日期的一部分是不允许的。在这种情况下,STR_TO_DATE()返回NULL,并生成一个警告:

mysql> set sql_mode=''; 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

mysql> select str_to_date('2005-03-00', '%Y-%m-%d'); 
+---------------------------------------+ 
| str_to_date('2005-03-00', '%Y-%m-%d') | 
+---------------------------------------+ 
| 2005-03-00       | 
+---------------------------------------+ 

所以,你可以改变你的SQL_MODE。但我会建议你修改你的数据。