0

示例数据:

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列 ISNULL插入的值来自str_to_dateDateTime 列的 a。

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

2 回答 2

1

简直了

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 在这方面已经做得很好了。

于 2013-08-14T14:17:59.007 回答
0

尝试这个

UPDATE table SET DataTimeProper = 
    (SELECT STR_TO_DATE(DateTime,'%m/%e/%Y %H:%i:%s'))
WHERE DataTimeProper IS NULL

尽管您应该考虑将DateTime列更改为类型DATETIME而不是字符串,因为这将提高效率。特别是当您处理数百万行的表时。

于 2013-08-14T13:34:32.693 回答