我有一个完整的mysql表,大约40000行,列名为“epoch\u time”,其中有epoch time,我想把整个表的“epoch\u time”转换成一个等效的“date”,在一个sql查询中,我是在php\u my\u admin中完成的。提前谢谢。
szqfcxe21#
我猜epochtime指的是unix风格的时间戳,即自 1970-01-01T00:00Z . 如果我的猜测是错的,那么我其余的答案也是错的。首先向表中添加一个新列。
1970-01-01T00:00Z
ALTER TABLE mytable ADD COLUMN datestamp DATETIME AFTER epochtime;
这将命名新列 datestamp 把它放在后面 epochtime 在列列表中。然后更新整个表,使用 FROM_UNIXTIME() . 省略 WHERE 子句使更新在整个表上工作(小心!)。
datestamp
epochtime
FROM_UNIXTIME()
WHERE
UPDATE mytable SET datestamp = FROM_UNIXTIME(epochtime);
最后,如果你愿意,你可以删除旧列。
UPDATE TABLE mytable DROP COLUMN epochtime;
如果我是你,我会在你的数据库副本上尝试所有这些,以确保它是正确的,然后再在你的生产数据库上做。如果您的epochtime值已经具有 TIMESTAMP 数据类型,它们已在内部存储为utc(f/k/a gmt)时间。我建议的更新操作将根据服务器上的设置将它们转换为本地时间。如果您的应用程序有多个时区的用户,您可能希望继续使用 TIMESTAMP 数据类型:它接受时区设置。如果你的历元时间存储在 INT 列,您可以使用 TIMESTAMP 而不是 DATETIME 请用这一行代替我上面说明中的第一行。
TIMESTAMP
INT
DATETIME
ALTER TABLE mytable ADD COLUMN datestamp TIMESTAMP AFTER epochtime;
1条答案
按热度按时间szqfcxe21#
我猜epochtime指的是unix风格的时间戳,即自
1970-01-01T00:00Z
. 如果我的猜测是错的,那么我其余的答案也是错的。首先向表中添加一个新列。
这将命名新列
datestamp
把它放在后面epochtime
在列列表中。然后更新整个表,使用
FROM_UNIXTIME()
. 省略WHERE
子句使更新在整个表上工作(小心!)。最后,如果你愿意,你可以删除旧列。
如果我是你,我会在你的数据库副本上尝试所有这些,以确保它是正确的,然后再在你的生产数据库上做。
如果您的epochtime值已经具有
TIMESTAMP
数据类型,它们已在内部存储为utc(f/k/a gmt)时间。我建议的更新操作将根据服务器上的设置将它们转换为本地时间。如果您的应用程序有多个时区的用户,您可能希望继续使用
TIMESTAMP
数据类型:它接受时区设置。如果你的历元时间存储在INT
列,您可以使用TIMESTAMP
而不是DATETIME
请用这一行代替我上面说明中的第一行。