Convert BigInt timestamp to a real Date with row aggregation and operations in mySQL(在 mySQL 中使用行聚合和操作将 BigInt 时间戳转换为真实日期)
问题描述
我有一个查询,它采用上次更新日期(时间戳,但作为 bigint(20) 列),如下所示:
I have a query which takes the last update date (timestamp but as a bigint(20) column) like this:
SELECT a.id_workorder, MAX(b.update_date) AS udpate_date
FROM main_log a,
(
SELECT MAX(log_date) AS update_date, log_id
FROM log_a
GROUP BY log_id
UNION
SELECT MAX(log_date) AS update_date, log_id
FROM log_b
GROUP BY log_id
)b
WHERE a.id_log = b.log_id
GROUP BY b.log_id
并且它返回任何类型的日志(a 或 b)的最后更新日期(unix 时间戳作为 bigint(20)):
and it returns the last update date (unix timestamp as a bigint(20)) for any kind of log (a or b):
id last update
-------------------------
1001 1376750476349
1002 1376753690861
1003 1378122801986
1004 1377764414858
1005 1377847226096
...
现在我想以日期格式格式化返回,虽然我可以像这样使用 FROM_UNIXTIME
格式化外部时间戳,但我很天真:
Now I want to format the return in date format and I naively though I can just format the outside timestamp with FROM_UNIXTIME
like this:
SELECT
a.id_workorder,
FROM_UNIXTIME(MAX(b.update_date)) AS udpate_date
FROM main_log a,
(
SELECT MAX(log_date) AS update_date, log_id
FROM log_a
GROUP BY log_id
UNION
SELECT MAX(log_date) AS update_date, log_id
FROM log_b
GROUP BY log_id
)b
WHERE a.id_log = b.log_id
GROUP BY b.log_id
但它给了
id last update
-------------------------
1001 null
1002 null
1003 null
1004 null
1005 null
...
我也尝试将转换放入内部查询中,但结果相同.
I tried to put the conversion in the inner queries as well but it is the same.
我还尝试在 SO、mySQL 文档和 Google 上找到答案,但没有找到为什么在我创建 group by
时转换不起作用.
I also tried to find answers on SO, mySQL documentation and Google but did not find why the conversion does not works when I make a group by
.
推荐答案
您的时间戳以毫秒为单位尝试:
Your timestamp is in milliseconds try:
SELECT a.id_workorder,
FROM_UNIXTIME(MAX(b.update_date/1000)) AS udpate_date
FROM main_log a, ...
(即时间除以 1000 得到秒)
(i.e. divide the time by 1000 to get seconds)
mysql> select FROM_UNIXTIME(1376750476349);
+------------------------------+
| FROM_UNIXTIME(1376750476349) |
+------------------------------+
| NULL |
+------------------------------+
1 row in set (0.06 sec)
mysql> select FROM_UNIXTIME(1376750476349/1000);
+-----------------------------------+
| FROM_UNIXTIME(1376750476349/1000) |
+-----------------------------------+
| 2013-08-17 15:41:16 |
+-----------------------------------+
1 row in set (0.02 sec)
mysql>
这篇关于在 mySQL 中使用行聚合和操作将 BigInt 时间戳转换为真实日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 mySQL 中使用行聚合和操作将 BigInt 时间戳转换为真实日期


- SQL 临时表问题 2022-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 更改自动增量起始编号? 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01