示例数据:
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
,其中插入的值来自str_to_date
DateTime列。
SELECT STR_TO_DATE(`DateTime`,'%m/%e/%Y %H:%i:%s');
答案 0 :(得分: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已经做得很好。
答案 1 :(得分:0)
试试这个
UPDATE table SET DataTimeProper =
(SELECT STR_TO_DATE(DateTime,'%m/%e/%Y %H:%i:%s'))
WHERE DataTimeProper IS NULL
虽然您应该考虑将DateTime
列更改为DATETIME
类型而不是字符串,因为这样可以提高效率。特别是当你处理数百万行的表时。