【问题标题】:Convert all colums in the rows from date to timestamp MySQL将行中的所有列从日期转换为时间戳 MySQL
【发布时间】:2012-09-06 16:03:51
【问题描述】:

我有一个包含 13000 行的数据库。每行都包含“日期”列,现在采用这种格式(示例):2012-09-01 17:53:28,但我希望它们是 TIMESTAMP。

我应该运行什么查询来将所有名为“日期”的列从日期更新为所有行的时间戳?

谢谢

【问题讨论】:

  • 如果日期的存储方式与您声明的方式相同,即2012-09-01 17:53:28,那么您可以简单地使用ALTER TABLE `tbl` CHANGE COLUMN `date` `date` TIMESTAMP

标签: mysql date timestamp


【解决方案1】:

您可以在查询时使用UNIX_TIMESTAMP() 函数将值作为时间戳返回。像这样:

mysqli_query("select UNIX_TIMESTAMP(date) as date from table");

【讨论】:

  • 为什么这个答案里有mysql_query
  • OP 似乎在使用 mysql,因为在标题及其标签之一上有它,只是猜测他正在使用该功能。
  • 好吧,mysqli 无疑是一种改进,但最初的问题与 PHP 没有任何关系。
【解决方案2】:

使用ALTER TABLE 命令从一种类型转换为另一种类型非常简单:

ALTER TABLE table_name CHANGE old_date new_timestamp TIMESTAMP

如果您有大量数据和大量索引,此过程可能需要一段时间才能完成。

我不确定您为什么要将这些切换到 TIMESTAMP 类型,因为它的范围比 DATETIME 更有限。区别是 documented 并且很重要。

【讨论】:

    【解决方案3】:

    不清楚您要的是什么。存在以下数据类型:datetimedatetimetimestamp。还有UNIX_TIMESTAMP,这是自 1970-01-01 以来的秒数,但我认为这不是你想要的。

    我建议你阅读this

    DATETIME 类型用于同时包含日期和时间的值 部分。 MySQL 检索并显示 'YYYY-MM-DD 中的 DATETIME 值 HH:MM:SS' 格式。支持的范围是 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。

    TIMESTAMP 数据类型用于同时包含日期和 时间部分。 TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。

    当您想转换您的列date 时:

    ALTER TABLE yourTable MODIFY COLUMN yourDateColumn TIMESTAMP;
    

    【讨论】:

      【解决方案4】:
      SELECT UNIX_TIMESTAMP('2012-09-01 17:53:28');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-27
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        相关资源
        最近更新 更多