示例数据:

PostID                DateTime            DataTimeProper UserID   UserName IPAddress
1234567.page#00008912 07/25/2013 14:50:21 NULL           00000001 TestUser 127.0.0.1
2468012.page#04208002 07/28/2013 18:42:13 NULL           03209827 BobTest  127.0.0.2


我正在寻找最有效的方法来更新表(百万)中的每条记录(其中DateTimeProper列为NULL且其插入的值来自DateTime列的str_to_date)。

 SELECT STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s');

最佳答案

简直就是

UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL;


它需要很长的时间,而且它是一次性操作,对吗?

如果您真的坚持,您可能会麻烦自己进行大块更新,例如(假设您有一个名为id或诸如此类的auto_increment列)

UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL
AND id BETWEEN 0 AND 10000;


接着

UPDATE yourTable SET DateTimeProper = STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s')
WHERE DateTimeProper IS NULL
AND id BETWEEN 10000 AND 20000;


等等。有人希望这样做是为了让这些块适合内存,但是在我看来,这样做是不值得的。 MySQL已经在这方面做得很好。

10-07 22:49