首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在BigInt中将MySQL转换为时间戳

在BigInt中将MySQL转换为时间戳
EN

Stack Overflow用户
提问于 2018-05-17 20:46:25
回答 3查看 9.7K关注 0票数 7

我有一个表,在这个表中,我有一个列,它当前存储一个类型为BigInt的值,我想改变这个列以包含‘时间戳’值。

我怎样才能做到这一点。我试过:

代码语言:javascript
运行
复制
ALTER TABLE t
MODIFY c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

我得到的是:

代码语言:javascript
运行
复制
#1292 - Incorrect datetime value: '1524120113' for column 'created_temp' at row 1

代码语言:javascript
运行
复制
ALTER TABLE share ADD created_temp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
UPDATE share SET created_temp = UNIX_TIMESTAMP(created);

我得到的是:#1292 - Incorrect datetime value: '1524120113'

created的内容是使用UNIX_TIMESTAMP()创建的

EN

Stack Overflow用户

回答已采纳

发布于 2018-10-23 00:08:29

您得到了第一个错误,因为DBMS不能动态地转换列。第二个错误来自于这样一个事实,即UNIX_TIMESTAMP()需要一个DATETIMETIMESTAMP字符串而不是整数,所以您应该使用FROM_UNIXTIME()

关于这两个函数之间的区别,UNIX_TIMESTAMP()文档有一个重要的说明:

如果使用UNIX_TIMESTAMP()和FROM_UNIXTIME()在时间戳值和Unix时间戳值之间进行转换,则转换是有损的,因为映射不是双向一对一的。例如,由于本地时区更改的约定,两个UNIX_TIMESTAMP()可以将两个时间戳值映射到相同的Unix时间戳值。FROM_UNIXTIME()将该值映射回原始时间戳值中的一个。

--

下面是执行任务所需的步骤(,它可能需要很长时间才能完成,因为所有行都必须重写!):

  1. 向数据库中添加一个新列: ALTER添加new_column时间戳NULL;-- PS:您可能希望在这里使用默认值而不是NULL。
  2. 转换旧值并用它们填充新列: 更新mytable集new_column = FROM_UNIXTIME( old_column ),其中old_column不是NULL;
  3. 删除旧栏: 更改表mytable删除列old_column;
  4. 将新列重命名为旧名称: 修改表mytable更改new_column old_column;
票数 8
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50400259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档