Mysql STR_TO_DATE函数返回0000-00-00

Mysql STR_TO_DATE函数返回0000-00-00,mysql,date,Mysql,Date,我有几个varchar类型的列,其中包含不同格式的日期。我试图使用STR_to_DATE函数更改它们的格式,然后将它们的类型更改为DATE。因为此列中的日期是mm/dd/yyyy,所以我运行了此查询 UPDATE `table` SET `date` = STR_TO_DATE(`date`, '%m/%d/%Y'); 但是,它将所有条目更改为0000-00-00,我在这个表中有2000多行。在我将它应用到其他行之前,我正在试图弄清楚它为什么会这样做。提前谢谢 MySQL识别以下格式的值: 作

我有几个varchar类型的列,其中包含不同格式的日期。我试图使用STR_to_DATE函数更改它们的格式,然后将它们的类型更改为DATE。因为此列中的日期是mm/dd/yyyy,所以我运行了此查询

UPDATE `table` SET `date` = STR_TO_DATE(`date`, '%m/%d/%Y');
但是,它将所有条目更改为0000-00-00,我在这个表中有2000多行。在我将它应用到其他行之前,我正在试图弄清楚它为什么会这样做。提前谢谢

MySQL识别以下格式的值:

作为“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”

作为YYYYMMDD或YYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905和830905被解释为“1983-09-05”

注:

就你而言

UPDATEtableSETdate=STR_TO_DATEdate,'%m/%d/%Y'

存储在数据库中时给定的日期格式无效,这就是为什么您得到0000-00-00。因为日期已存储为此格式“%Y-%m-%d”

但是,如果要以所需格式显示存储的日期,假设所需格式为“%m/%d/%Y”,则可以使用以下查询:

挑选 日期\u格式日期,'%m/%d/%Y' 从日期表

更多:

仅当满足以下两个条件时,更新操作才会起作用:

假设有效日期存储在表中,则上面已经说明了有效日期格式 如果要使用以下查询而不是前面提到的查询:

更新datetable SETdate=STR_TO_datedatedate,“%Y-%m-%d”;在这种情况下,不会影响任何行,因为您正在尝试使用相同的值进行更新


更新前date有哪些值?@Mureinik仅将常规日期作为字符串,例如5/27/2016查看日期格式函数我无法重现该问题。选择日期为'5/27/2016','%m/%d/%Y';-结果:2016-05-27如果传递到此函数STR_TO_date as string的日期时间值非法,则函数返回NULL。因此,在上述场景中,您的字符串可能无效。看一看,请告诉我否决投票的原因。我可以修改我的答案,使它符合要求。它是字符串到日期而不是日期到字符串。我想你是在倒读。我想说的是,除非格式化的日期是MySQL支持的,否则不能在数据库中存储/更新日期值。但在显示时可以采用任何有效的日期格式@塔德马尼听到了,但我还是觉得这个答案有点困惑。最初的问题很奇怪,但我相信他们可能在试图用错误的顺序存储日期值来拯救数据。但是,谁能以错误的顺序存储日期呢?因为在MySQL中,当以错误的顺序存储日期时,日期将被存储为0000-00-00。我不知道我是否错过了问题的微妙部分@tadman