首页 文章

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

提问于
浏览
9

我有一个查询,它采用上次更新日期(时间戳,但作为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 时,却没有找到为什么转换不起作用 .

1 回答

  • 20

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

    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>
    

相关问题