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

Mysql 如何将字段从时间戳转换为日期时间,mysql,sql,Mysql,Sql,我有一个遗留数据库,其中有一个表包含字段: 开始日期时间戳, 过期日期日期时间 如果在具有不同时区的数据库上使用数据库,则会导致某些查询出现问题。 所以为了避免它们,我想将start_date转换为DATETIME。如何安全地将时间戳转换为日期时间?如果我将开始日期的类型从时间戳更改为日期时间,是否会丢失任何数据?mysql将如何将日期时间戳转换为日期时间?您可以使用date()函数编写查询以查找行并将开始时间字段转换为DATETIME 然后将字段类型更改为DATETIME 下一个更新字段,新值

我有一个遗留数据库,其中有一个表包含字段: 开始日期时间戳, 过期日期日期时间

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

您可以使用date()函数编写查询以查找行并将开始时间字段转换为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'] . "'")
}

我会这样做:

1) 创建一个新的
datetime

ALTER TABLE mytable ADD COLUMN mydatetime DATETIME;
ALTER TABLE mytable DROP COLUMN mytimestamp;
2) 使用时间戳值更新此列

UPDATE mytable SET mydatetime=FROM_UNIXTIME(UNIX_TIMESTAMP(mytimestamp));
3) 经过几次完整性检查后,删除
时间戳

ALTER TABLE mytable ADD COLUMN mydatetime DATETIME;
ALTER TABLE mytable DROP COLUMN mytimestamp;
这对您来说应该足够安全,因为您可以保留原始的
时间戳
列,只要您愿意


这里有一个例子。

@Oleg不是我写的吗?我不明白你评论的意思。对不起,我不小心把它打印出来了。我会删除它。我只是想问这个查询如何转换时间戳日期?如果日期保存在不同的时区,我会有问题吗?我不这么认为,但最好的办法是在删除旧的
mytimestamp
列之前尝试并检查它是否正常工作。您不需要
UNIX\u TIMESTAMP()
updatemytable SET mydatetime=FROM\u UNIXTIME(mytimestamp))谢谢,它对我有用。@AlmirSarajčić我刚刚尝试在MySQL 5.6上不使用
UNIX_时间戳
,结果总是
null