我有一些varchar类型的列,其中包含不同格式的日期。我尝试使用STR_TO_DATE()
功能更改其格式,然后将其类型更改为日期。我运行此查询,因为此列中的日期为mm / dd / yyyy。
UPDATE `table` SET `date` = STR_TO_DATE(`date`, '%m/%d/%Y');
但是,它将所有条目更改为0000-00-00
,并且我在此表中已超过2000 rows
。在我将其应用到其他行之前,我试图找出它为什么这样做。提前谢谢。
答案 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'
。作为
YYYYMMDD
或YYMMDD
格式的数字,前提是该数字作为日期有意义。例如,19830905
和830905
被解释为'1983-09-05'
。
注意:强>
在你的情况下
UPDATE
表SET
日期= 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');
(在这种情况下,由于您尝试使用相同的值进行更新,因此不会影响任何行)