gpt4 book ai didi

mysql - 使用 mySQL 中的行聚合和操作将 BigInt 时间戳转换为真实日期

转载 作者:IT王子 更新时间:2023-10-29 00:31:16 27 4
gpt4 key购买 nike

我有一个查询,它采用最后更新日期(时间戳,但作为 bigint(20) 列),如下所示:

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)):

id          last update
-------------------------
1001 1376750476349
1002 1376753690861
1003 1378122801986
1004 1377764414858
1005 1377847226096
...

现在我想以日期格式格式化返回,虽然我可以像这样使用 FROM_UNIXTIME 格式化外部时间戳:

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
...

我也尝试将转换放在内部查询中,但它是一样的。

我还尝试在 SO、mySQL 文档和 Google 上找到答案,但没有找到为什么当我创建 group by 时转换不起作用。

最佳答案

您的时间戳以毫秒为单位尝试:

SELECT a.id_workorder, 
FROM_UNIXTIME(MAX(b.update_date/1000)) AS udpate_date
FROM main_log a, ...

(即将时间除以 1000 得到秒数)

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 - 使用 mySQL 中的行聚合和操作将 BigInt 时间戳转换为真实日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19585245/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com