Bulk convert and update datetime column values to UNIX timestamp?
背景
我有一个MySQL数据库,有大约1600万条记录。有两列
问题
我想通过转换所有值并用新值更新记录,将其更改为
我知道如何在循环中使用PHP,但是有没有一种方法可以通过在MySQL中执行单个查询来执行此更新?
因为这是一次性的改变;您可以这样进行:
创建具有
1 2 3 | ALTER TABLE `nameOfTable` ADD COLUMN `created` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `created_at`, ADD COLUMN `updated` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `updated_at`; |
更新表:
1 2 3 | UPDATE `nameOfTable` SET `created` = UNIX_TIMESTAMP( `created_at` ), `updated` = UNIX_TIMESTAMP( `updated_at` ); |
号
替代方式:
使用查询更新:
1 2 3 | UPDATE `nameOfTable` SET `created_at` = UNIX_TIMESTAMP( `created_at` ), `updated_at` = UNIX_TIMESTAMP( `updated_at` ); |
HJPotter92的回答帮助很大。
但在我的例子中,它并没有立即解决这个问题,因为我存储的日期的格式不被unix时间戳接受为参数。
所以我必须先把它转换成一种可接受的格式。经过一些研究,我得出了以下问题:
1 | UPDATE tableName set newFieldName = UNIX_TIMESTAMP(STR_TO_DATE(CAST(priorFieldName AS CHAR), '%m/%d/%y')); |
。