【问题标题】:How convert field from timestamp to datetime如何将字段从时间戳转换为日期时间
【发布时间】:2021-10-10 19:06:55
【问题描述】:

我有一个旧数据库,其中有一个包含字段的表: 开始日期时间戳, expiration_date DATETIME。

如果在具有不同时区的数据库上使用数据库,则会导致某些查询出现问题。 所以为了避免它们,我想将 start_date 转换为 DATETIME。如何安全地从 TIMESTAMP 转换为 DATETIME?如果我将 start_date 的类型从 TIMESTAMP 更改为 DATETIME,我不会丢失任何数据吗? mysql如何将日期TIMESTAMP转换为DATETIME?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    我会这样做:

    1) 创建一个新的datetime

    ALTER TABLE mytable ADD COLUMN mydatetime DATETIME;
    

    2) 使用时间戳值更新此列

    UPDATE mytable SET mydatetime=FROM_UNIXTIME(UNIX_TIMESTAMP(mytimestamp));
    

    3) 经过几次完整性检查后,删除timestamp

    ALTER TABLE mytable DROP COLUMN mytimestamp;
    

    这对您来说应该足够安全,因为您可以随意保留原始的 timestamp 列。

    这是一个sqlfiddle 示例。

    【讨论】:

    • @Oleg 这不是我写的吗?我不明白你评论的意思。
    • 对不起,我不小心打印了。我会删除它。我只是想问一下这个查询将如何转换时间戳日期?如果日期保存在不同的时区,我会遇到问题吗?
    • 我不这么认为,但最好的办法是在删除旧的mytimestamp 列之前先试一试并检查它是否能正常工作。
    • 你不需要UNIX_TIMESTAMP()UPDATE mytable SET mydatetime=FROM_UNIXTIME(mytimestamp); 谢谢,它对我有用。
    • @AlmirSarajčić 我刚刚在 MySQL 5.6 上尝试不使用 UNIX_TIMESTAMP,结果始终为 null (test on sqlfiddle)
    【解决方案2】:

    在 MySQL 中,您可以简单地将数据类型从 TIMESTAMP 更改为 DATETIME,而不会丢失数据:

    ALTER TABLE table_name MODIFY start_date DATETIME;
    

    【讨论】:

      【解决方案3】:

      您可以编写查询来查找行并将 start_time 字段转换为 DATETIME 使用 date() 函数。

      然后将字段类型更改为 DATETIME

      下一个更新字段,新值存储在您的变量中。

      例如:

      <?PHP
      //.. your codes like connection & ...
      // my_table is your table name.
      $query = mysql_query("SELECT * FROM my_table");
      $stored = array();
      $i = 0;
      while($row = mysql_fetch_assoc($query))
      {
          $stored[++$i] = date('Y-m-d H:i:s', $row["start_date"]);
      }
      mysql_query("alter table my_table modify start_date DATETIME;");
      $query = mysql_query("SELECT * FROM my_table");
      $i = 0;
      while($row = mysql_fetch_assoc($query))
      {
          // Id is your primary key.
          mysql_query("UPDATE my_table SET start_date='" . $stored[++$i] . "' WHERE id='" . $row['id'] . "'")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-23
        • 2019-07-21
        • 1970-01-01
        • 2019-04-03
        • 1970-01-01
        • 2017-04-25
        • 2022-01-08
        相关资源
        最近更新 更多