首页 > 解决方案 > 在 Sql 中将 Bigint 数据转换为人类可读的日期时间

问题描述

MySql用下面的代码创建了一个表格并在其中提供数据

CREATE TABLE IF NOT EXISTS DB (
    INN VARCHAR(200) NOT NULL, 
    Time BIGINT not NULL
);

现在我想得到一个表格,它将报告Time分组时的最大值和最小值INN。下面是我的代码 -

SELECT INN, from_unixtime(MIN(Time)), from_unixtime(MAX(Time)) FROM DB GROUP BY INN

我想将Time值报告为正常日期时间而不是纪元时间。但是使用上面的代码,我得到了<NA>值。

一个典型的Time值就像1546380001264082944

有人可以帮我获得正确的代码来实现同样的目标。

标签: mysqlepochbigint

解决方案


这里的问题与您使用的 unix 时间戳的精度有关。

考虑一下:

SELECT FROM_UNIXTIME(1546380001), FROM_UNIXTIME(1546380001264082944)

输出是:

2019-01-01T22:00:01Z    (null)

您拥有的时间戳值 1546380001264082944 包含超出 MySQL 接受的精度级别。

的定义FROM_UNIXTIME是:

FROM_UNIXTIME(unix_timestamp[,format])

该文档指出:

unix_timestamp是一个内部时间戳值,表示自 '1970-01-01 00:00:00' UTC 以来的秒数

自 Unix 纪元以来,时间戳的精度明显高于秒数。

文档可在此处获得。


推荐阅读