批量转换并将datetime列值更新为UNIX时间戳?

时间:2013-05-03 03:28:10

标签: php mysql

背景

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

问题

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

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

2 个答案:

答案 0 :(得分:4)

因为这将是一次性改变;你可以这样做:

  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

  4. 替代方式:

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

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

答案 1 :(得分:0)

hjpotter92的回答很有帮助。

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

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

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