首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MySQL中从UNIX_TIMESTAMP()获取UTC日期时间

如何在MySQL中从UNIX_TIMESTAMP()获取UTC日期时间
EN

Stack Overflow用户
提问于 2016-12-01 06:54:03
回答 2查看 921关注 0票数 1

我想知道如何在mysql中从unix_timestamp中获取utc datetime。

但是,我不应该使用CONVERT_TZ。

(因为无法在分区中使用时区函数。)

错误发生在SQL架构中...

代码语言:javascript
复制
CREATE TABLE `table` (
  `idx` BIGINT(20) NOT NULL,
  etc...
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE( YEAR(CONVERT_TZ(from_unixtime(`idx` >> 24), @@session.time_zone, '+00:00')) )
SUBPARTITION BY HASH ( MONTH(CONVERT_TZ(from_unixtime(`idx` >> 24), @@session.time_zone, '+00:00')) )
SUBPARTITIONS 12 (
    PARTITION p2016 VALUES LESS THAN (2016),
    PARTITION p2017 VALUES LESS THAN (2017),
    PARTITION p2018 VALUES LESS THAN (2018),
    PARTITION p2019 VALUES LESS THAN (2019),
    PARTITION p2020 VALUES LESS THAN (2020)
)
EN

Stack Overflow用户

发布于 2016-12-01 07:10:44

我认为你的问题不是CONVERT_TZ,而是FROM_UNIXTIME

FROM_UNIXTIME接受一个整数作为参数-这意味着32位。

如果你使用今天的unix-timestamp:1480546792,右移24位--你刚刚超过了unix_time上有效参数的32位限制。

from_unixtime只能处理直到2147483647的参数-这意味着它在2038-01-19 04:14:07之前一直有效

我也遇到过这个问题,自2002年以来,这个问题的一个修复程序正在“开发中”。

在该问题最终得到解决之前,您应该使用一种变通方法,即使用date_add。而不是

代码语言:javascript
复制
from_unixtime (x)

使用

代码语言:javascript
复制
date_add(from_unixtime(0), INTERVAL x second)

结果:

代码语言:javascript
复制
SELECT from_unixtime (2147483647); //2038-01-19 04:14:07 
SELECT from_unixtime (2147483648); //NULL

SELECT date_add(from_unixtime(0), Interval 2147483647 second) //2038-01-19 04:14:07
SELECT date_add(from_unixtime(0), Interval 2147483648 second) //2038-01-19 04:14:08
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40899761

复制
相关文章

相似问题

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