如何将字段从时间戳转换为日期时间

Ole*_*leg 5 mysql sql

我有一个旧数据库,其中有包含以下字段的表:start_date TIMESTAMP,expiration_date DATETIME。

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

小智 10

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

ALTER TABLE table_name MODIFY start_date DATETIME;
Run Code Online (Sandbox Code Playgroud)


jul*_*enc 7

这就是我要做的:

1)创建一个新datetime

ALTER TABLE mytable ADD COLUMN mydatetime DATETIME;
Run Code Online (Sandbox Code Playgroud)

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

UPDATE mytable SET mydatetime=FROM_UNIXTIME(UNIX_TIMESTAMP(mytimestamp));
Run Code Online (Sandbox Code Playgroud)

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

ALTER TABLE mytable DROP COLUMN mytimestamp;
Run Code Online (Sandbox Code Playgroud)

这对于您来说应该足够安全,因为您可以根据需要保留原始timestamp列。

这是一个sqlfiddle示例。

  • 您不需要`UNIX_TIMESTAMP()`:`UPDATE mytable SET mydatetime=FROM_UNIXTIME(mytimestamp);`谢谢,它对我有用。 (2认同)

Moh*_*ian -1

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

然后将字段类型更改为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'] . "'")
}
Run Code Online (Sandbox Code Playgroud)