2017-08-30 74 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。但我會建議你修改你的數據。