Unix 时间显示 1h 为空值
Unix time show 1h with empty value
我想将所有值的摘要显示为可视日期。例如:
Key
Val1
Val2
Val3
1
125
545
0
2
0
467
0
这里,val1
、val2
和val3
的单位是秒。在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'
我想将所有值的摘要显示为可视日期。例如:
Key | Val1 | Val2 | Val3 |
---|---|---|---|
1 | 125 | 545 | 0 |
2 | 0 | 467 | 0 |
这里,val1
、val2
和val3
的单位是秒。在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'