在 Sql 中将 Bigint 数据转换为人类可读的日期时间
Convert Bigint data to human readable date-time in Sql
我创建了一个 MySql
table 并使用以下代码在其中提供数据
CREATE TABLE IF NOT EXISTS DB (
INN VARCHAR(200) NOT NULL,
Time BIGINT not NULL
);
现在我想要一个 table,它将在按 INN
分组时报告 Time
的最大值和最小值。下面是我的代码 -
SELECT INN, from_unixtime(MIN(Time)), from_unixtime(MAX(Time)) FROM DB GROUP BY INN
我想要将 Time
值报告为 正常日期时间 而不是大纪元时间。但是使用上面的代码,我得到了 <NA>
个值。
典型的 Time
值类似于 1546380001264082944
有人可以帮助我获得正确的代码来实现相同的目的吗?
这里的问题与您使用的 unix 时间戳的精度有关。
考虑一下:
SELECT FROM_UNIXTIME(1546380001), FROM_UNIXTIME(1546380001264082944)
输出为:
2019-01-01T22:00:01Z (null)
您拥有的 timestampt 值 1546380001264082944 包含超出 MySQL 接受的精度级别。
FROM_UNIXTIME
的定义是:
FROM_UNIXTIME(unix_timestamp[,format])
文档指出:
unix_timestamp
is an internal timestamp value representing seconds
since '1970-01-01 00:00:00' UTC
您的时间戳精度明显高于自 Unix 纪元以来的秒数。
文档可用 here。
值1546380001264082944
太大了,不能是纪元秒甚至毫秒。通过将此值放在 https://currentmillis.com/.
上可以轻松验证这一点
您已将精度存储到纳秒级。因此,在将列值传递给 from_unixtime
.
之前,将列值除以 1e9
SELECT INN, from_unixtime(MIN(Time) / 1000000000), from_unixtime(MAX(Time) / 1000000000)
FROM DB
GROUP BY INN
我创建了一个 MySql
table 并使用以下代码在其中提供数据
CREATE TABLE IF NOT EXISTS DB (
INN VARCHAR(200) NOT NULL,
Time BIGINT not NULL
);
现在我想要一个 table,它将在按 INN
分组时报告 Time
的最大值和最小值。下面是我的代码 -
SELECT INN, from_unixtime(MIN(Time)), from_unixtime(MAX(Time)) FROM DB GROUP BY INN
我想要将 Time
值报告为 正常日期时间 而不是大纪元时间。但是使用上面的代码,我得到了 <NA>
个值。
典型的 Time
值类似于 1546380001264082944
有人可以帮助我获得正确的代码来实现相同的目的吗?
这里的问题与您使用的 unix 时间戳的精度有关。
考虑一下:
SELECT FROM_UNIXTIME(1546380001), FROM_UNIXTIME(1546380001264082944)
输出为:
2019-01-01T22:00:01Z (null)
您拥有的 timestampt 值 1546380001264082944 包含超出 MySQL 接受的精度级别。
FROM_UNIXTIME
的定义是:
FROM_UNIXTIME(unix_timestamp[,format])
文档指出:
unix_timestamp
is an internal timestamp value representing seconds since '1970-01-01 00:00:00' UTC
您的时间戳精度明显高于自 Unix 纪元以来的秒数。
文档可用 here。
值1546380001264082944
太大了,不能是纪元秒甚至毫秒。通过将此值放在 https://currentmillis.com/.
您已将精度存储到纳秒级。因此,在将列值传递给 from_unixtime
.
SELECT INN, from_unixtime(MIN(Time) / 1000000000), from_unixtime(MAX(Time) / 1000000000)
FROM DB
GROUP BY INN