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

时间:2014-07-13 08:06:08

标签: mysql sql

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

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

2 个答案:

答案 0 :(得分:5)

我就是这样做的:

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示例。

答案 1 :(得分:0)

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

然后将字段类型更改为 DATETIME

下一个更新字段,其中包含存储在var。

中的新值

例如:

<?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'] . "'")
}