STR_TO_DATE函数返回0000-00-00

时间:2016-05-27 15:54:45

标签: mysql date

我有一些varchar类型的列,其中包含不同格式的日期。我尝试使用STR_TO_DATE()功能更改其格式,然后将其类型更改为日期。我运行此查询,因为此列中的日期为mm / dd / yyyy。

UPDATE `table` SET `date` = STR_TO_DATE(`date`, '%m/%d/%Y');

但是,它将所有条目更改为0000-00-00,并且我在此表中已超过2000 rows。在我将其应用到其他行之前,我试图找出它为什么这样做。提前谢谢。

1 个答案:

答案 0 :(得分:-1)

  

MySQL以这些格式识别DATE值:

     
      
  • 作为'YYYY-MM-DD''YY-MM-DD'格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31''2012/12/31''2012^12^31''2012@12@31'是等效的。

  •   
  • 作为没有'YYYYMMDD''YYMMDD'格式的分隔符的字符串,前提是该字符串作为日期有意义。例如,'20070523''070523'被解释为'2007-05-23',但'071332'是非法的(它具有无意义的月和日部分)并变为'0000-00-00'

  •   
  • 作为YYYYMMDDYYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905830905被解释为'1983-09-05'

  •   

注意:

在你的情况下

UPDATESET日期= STR_TO_DATE(日期, '%m/%d/%Y');

存储在数据库中的给定日期格式无效(这就是您获得0000-00-00的原因)。因为日期已经以'%Y-%m-%d'格式存储。

但是,如果您想以所需的格式显示存储的日期(假设您所需的格式为'%m/%d/%Y'),那么您可以使用以下查询:

SELECT DATE_FORMAT(日期,'%m/%d/%Y') FROM datetable;

更多

只有满足以下两个条件时,您的更新操作才有效:

  • 假设有效日期存储在您的表格中(上文已说明的有效日期格式)
  • 如果您使用以下查询而不是上述查询:

    UPDATE datetable SET日期= STR_TO_DATE(日期,'%Y-%m-%d');(在这种情况下,由于您尝试使用相同的值进行更新,因此不会影响任何行)