Unix 时间显示 1h 为空值

Unix time show 1h with empty value

我想将所有值的摘要显示为可视日期。例如:

Key Val1 Val2 Val3
1 125 545 0
2 0 467 0

这里,val1val2val3的单位是秒。在SQL中,它们被保存为BIGINT(20)

这些值代表每个用户做不同事情的时间。因此,具有密钥 1 的用户在名为 val1 的页面上停留 125 秒,在页面 val2 上停留 545 秒,在 val3 上停留 0 秒。

objective就是知道哪个页面用的多,用户停留的时间多。所以,我想做一个可读的时间,例如将“3600秒”转换为“1小时”。

更准确地说,我想显示成这样:

Val1 Val2 Val3
2min 05s 16min 52s 0s

我尝试使用 this 之类的东西,但它仅适用于 sql-server

实际上,我做了这个:

SELECT
FROM_UNIXTIME(SUM(val1), '%dd %hh %imin') as val1,
FROM_UNIXTIME(SUM(val2), '%dd %hh %imin') as val2,
FROM_UNIXTIME(SUM(val3), '%dd %hh %imin') as val3,
FROM my_table;

但是,这是我的结果:

Val1 Val2 Val3
1d 1h 2min 05s 1d 1h 16min 52s 1d 1h 0min 0s

即使空值(例如“0min”)不打扰我,1d 1h 也是问题所在。

如何将它们设置为 0h 或删除它们是否为空?

你得到 1d 因为 unix 纪元是 1st Jan 1970 所以即使你有一个包含零的 var,如果你是输出您将获得 January 的月份和您猜对的年份 1900

This begs the question, what are you actually trying to achieve with this code, my guess is this is not going to do it.

这可能更符合您的要求

SELECT CONCAT(
            FLOOR(TIME_FORMAT(SEC_TO_TIME(SUM(val1)), '%H') / 24), 'days ',
            MOD(TIME_FORMAT(SEC_TO_TIME(SUM(val1)), '%H'), 24), 'h:',
            TIME_FORMAT(SEC_TO_TIME(SUM(val1)), '%im:%ss')
        ) AS Val1,
        CONCAT(
            FLOOR(TIME_FORMAT(SEC_TO_TIME(SUM(val2)), '%H') / 24), 'days ',
            MOD(TIME_FORMAT(SEC_TO_TIME(SUM(val2)), '%H'), 24), 'h:',
            TIME_FORMAT(SEC_TO_TIME(SUM(val2)), '%im:%ss')
        ) AS Val2,
        CONCAT(
            FLOOR(TIME_FORMAT(SEC_TO_TIME(SUM(val3)), '%H') / 24), 'days ',
            MOD(TIME_FORMAT(SEC_TO_TIME(SUM(val3)), '%H'), 24), 'h:',
            TIME_FORMAT(SEC_TO_TIME(SUM(val3), '%im:%ss')
        ) AS Val3

结果

'0days 0h:02m:05s', '0days 0h:16m:52s', '0days 0h:00m:00s'