【问题标题】:Bulk convert and update datetime column values to UNIX timestamp?将日期时间列值批量转换和更新为 UNIX 时间戳?
【发布时间】:2013-04-27 09:30:48
【问题描述】:

背景

我有一个包含大约 1600 万条记录的 MySQL 数据库。有 2 列 created_atupdated_at 目前采用 datetime 格式。

问题

我想通过转换所有值并使用新值更新记录来将其更改为 UNIX Timestamp

我知道如何在循环中使用 PHP 执行此操作,但有没有办法通过在 MySQL 中执行单个查询来执行此更新?

【问题讨论】:

  • 两个原因; 1 学习方面;和 2,因为我认为它会为我节省 250+ MB 的存储空间以及等量的 Index。当我使用不稳定的互联网连接时,从云端进行离线备份会稍微容易一些。

标签: php mysql


【解决方案1】:

因为这将是一次性更改;你可以这样继续:

  1. 使用INT 数据类型创建新列,并将它们命名为createdupdated

    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`;
    
  2. 更新表:

    UPDATE `nameOfTable`
    SET `created` = UNIX_TIMESTAMP( `created_at` ),
        `updated` = UNIX_TIMESTAMP( `updated_at` );
    
  3. 删除旧列并将新列重命名为 created_atupdated_at

另一种方式:

  1. DATETIME 列设置为VARCHAR 字段。
  2. 使用查询更新:

    UPDATE `nameOfTable`
    SET `created_at` = UNIX_TIMESTAMP( `created_at` ),
        `updated_at` = UNIX_TIMESTAMP( `updated_at` );
    
  3. 将列更改为INT

【讨论】:

【解决方案2】:

hjpotter92 的回答很有帮助。

但在我的情况下,它并没有立即解决问题,因为我存储的日期的格式不被 UNIX_TIMESTAMP 接受为参数。

所以我必须先将其转换为可接受的格式。经过一番研究,我得到了以下查询:

UPDATE tableName set newFieldName = UNIX_TIMESTAMP(STR_TO_DATE(CAST(priorFieldName AS CHAR), '%m/%d/%y'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2015-02-09
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多